aboutsummaryrefslogtreecommitdiffstats
path: root/rpc/codec/codec.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-06-11 22:41:43 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-06-11 22:41:43 +0800
commite2c2d8e15ebef85c77f7486f92c6430ca6f30785 (patch)
tree1cd237e5aba5453c641a8d631cffd96c9eb08757 /rpc/codec/codec.go
parent6609d45ef48ce1c2d2b0e73fa8fe5190d36e3920 (diff)
parentb3c07f167f8b82d1079abe6e15cd1f480712b030 (diff)
downloaddexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.tar
dexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.tar.gz
dexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.tar.bz2
dexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.tar.lz
dexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.tar.xz
dexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.tar.zst
dexon-e2c2d8e15ebef85c77f7486f92c6430ca6f30785.zip
Merge pull request #1239 from bas-vk/rpc-apis
RPC refactoring
Diffstat (limited to 'rpc/codec/codec.go')
-rw-r--r--rpc/codec/codec.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/rpc/codec/codec.go b/rpc/codec/codec.go
new file mode 100644
index 000000000..5e8f38438
--- /dev/null
+++ b/rpc/codec/codec.go
@@ -0,0 +1,47 @@
+package codec
+
+import (
+ "net"
+ "strconv"
+
+ "github.com/ethereum/go-ethereum/rpc/shared"
+)
+
+type Codec int
+
+// (de)serialization support for rpc interface
+type ApiCoder interface {
+ // Parse message to request from underlying stream
+ ReadRequest() (*shared.Request, error)
+ // Parse response message from underlying stream
+ ReadResponse() (interface{}, error)
+ // Encode response to encoded form in underlying stream
+ WriteResponse(interface{}) error
+ // Decode single message from data
+ Decode([]byte, interface{}) error
+ // Encode msg to encoded form
+ Encode(msg interface{}) ([]byte, error)
+ // close the underlying stream
+ Close()
+}
+
+// supported codecs
+const (
+ JSON Codec = iota
+ nCodecs
+)
+
+var (
+ // collection with supported coders
+ coders = make([]func(net.Conn) ApiCoder, nCodecs)
+)
+
+// create a new coder instance
+func (c Codec) New(conn net.Conn) ApiCoder {
+ switch c {
+ case JSON:
+ return NewJsonCoder(conn)
+ }
+
+ panic("codec: request for codec #" + strconv.Itoa(int(c)) + " is unavailable")
+}