diff options
author | Felix Lange <fjl@twurst.com> | 2015-03-18 20:39:01 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-03-18 20:39:01 +0800 |
commit | d15f90645d5b2e90c441140972d9fe6ecd753643 (patch) | |
tree | b1f024c3c01f25b67bc25ed0452a9b584dad984f /rpc/jeth.go | |
parent | a59dd393e71cc52b1f96973aef884af619166f38 (diff) | |
parent | 0a1eeca41e6ba5920ba65d9b41654768299bc7e3 (diff) | |
download | dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.tar dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.tar.gz dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.tar.bz2 dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.tar.lz dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.tar.xz dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.tar.zst dexon-d15f90645d5b2e90c441140972d9fe6ecd753643.zip |
Merge remote-tracking branch 'ethereum/conversion' into conversion
Diffstat (limited to 'rpc/jeth.go')
-rw-r--r-- | rpc/jeth.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/rpc/jeth.go b/rpc/jeth.go new file mode 100644 index 000000000..11d4599c9 --- /dev/null +++ b/rpc/jeth.go @@ -0,0 +1,43 @@ +package rpc + +import ( + "encoding/json" + // "fmt" + "github.com/obscuren/otto" +) + +type Jeth struct { + ethApi *EthereumApi + toVal func(interface{}) otto.Value +} + +func NewJeth(ethApi *EthereumApi, toVal func(interface{}) otto.Value) *Jeth { + return &Jeth{ethApi, toVal} +} + +func (self *Jeth) err(code int, msg string, id interface{}) otto.Value { + rpcerr := &RpcErrorObject{code, msg} + rpcresponse := &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: rpcerr} + return self.toVal(rpcresponse) +} + +func (self *Jeth) Send(call otto.FunctionCall) (response otto.Value) { + reqif, err := call.Argument(0).Export() + if err != nil { + return self.err(-32700, err.Error(), nil) + } + + jsonreq, err := json.Marshal(reqif) + + var req RpcRequest + err = json.Unmarshal(jsonreq, &req) + + var respif interface{} + err = self.ethApi.GetRequestReply(&req, &respif) + if err != nil { + return self.err(-32603, err.Error(), req.Id) + } + rpcresponse := &RpcSuccessResponse{Jsonrpc: jsonrpcver, Id: req.Id, Result: respif} + response = self.toVal(rpcresponse) + return +} |