package rpctypes import ( "encoding/json" "github.com/tendermint/go-events" "github.com/tendermint/go-wire" ) type RPCRequest struct { JSONRPC string `json:"jsonrpc"` ID string `json:"id"` Method string `json:"method"` Params []interface{} `json:"params"` } func NewRPCRequest(id string, method string, params []interface{}) RPCRequest { return RPCRequest{ JSONRPC: "2.0", ID: id, Method: method, Params: params, } } //---------------------------------------- /* Result is a generic interface. Applications should register type-bytes like so: var _ = wire.RegisterInterface( struct{ Result }{}, wire.ConcreteType{&ResultGenesis{}, ResultTypeGenesis}, wire.ConcreteType{&ResultBlockchainInfo{}, ResultTypeBlockchainInfo}, ... ) */ type Result interface { } //---------------------------------------- type RPCResponse struct { JSONRPC string `json:"jsonrpc"` ID string `json:"id"` Result *json.RawMessage `json:"result"` Error string `json:"error"` } func NewRPCResponse(id string, res interface{}, err string) RPCResponse { var raw *json.RawMessage if res != nil { rawMsg := json.RawMessage(wire.JSONBytes(res)) raw = &rawMsg } return RPCResponse{ JSONRPC: "2.0", ID: id, Result: raw, Error: err, } } //---------------------------------------- // *wsConnection implements this interface. type WSRPCConnection interface { GetRemoteAddr() string GetEventSwitch() *events.EventSwitch WriteRPCResponse(resp RPCResponse) TryWriteRPCResponse(resp RPCResponse) bool } // websocket-only RPCFuncs take this as the first parameter. type WSRPCContext struct { Request RPCRequest WSRPCConnection }