github.com/jeffallen/go-ethereum@v1.1.4-0.20150910155051-571d3236c49c/rpc/codec/codec.go (about) 1 // Copyright 2015 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package codec 18 19 import ( 20 "net" 21 "strconv" 22 23 "github.com/ethereum/go-ethereum/rpc/shared" 24 ) 25 26 type Codec int 27 28 // (de)serialization support for rpc interface 29 type ApiCoder interface { 30 // Parse message to request from underlying stream 31 ReadRequest() ([]*shared.Request, bool, error) 32 // Parse response message from underlying stream 33 ReadResponse() (interface{}, error) 34 // Read raw message from underlying stream 35 Recv() (interface{}, error) 36 // Encode response to encoded form in underlying stream 37 WriteResponse(interface{}) error 38 // Decode single message from data 39 Decode([]byte, interface{}) error 40 // Encode msg to encoded form 41 Encode(msg interface{}) ([]byte, error) 42 // close the underlying stream 43 Close() 44 } 45 46 // supported codecs 47 const ( 48 JSON Codec = iota 49 nCodecs 50 ) 51 52 var ( 53 // collection with supported coders 54 coders = make([]func(net.Conn) ApiCoder, nCodecs) 55 ) 56 57 // create a new coder instance 58 func (c Codec) New(conn net.Conn) ApiCoder { 59 switch c { 60 case JSON: 61 return NewJsonCoder(conn) 62 } 63 64 panic("codec: request for codec #" + strconv.Itoa(int(c)) + " is unavailable") 65 }