package json import ( "encoding/json" "io" "git.loafle.net/commons_go/rpc/protocol" ) // ---------------------------------------------------------------------------- // Codec // ---------------------------------------------------------------------------- // NewClientCodec returns a new JSON Codec. func NewClientCodec() protocol.ClientCodec { return &ClientCodec{} } // ClientCodec creates a ClientCodecRequest to process each request. type ClientCodec struct { } func (cc *ClientCodec) WriteRequest(w io.Writer, method string, args []interface{}, id interface{}) error { params, err := convertParamsToStringArray(args) if nil != err { return err } req := &clientRequest{ Version: Version, Method: method, Params: params, ID: id, } encoder := json.NewEncoder(w) if err := encoder.Encode(req); nil != err { return err } return nil } // NewMessage returns a ClientMessageCodec. func (cc *ClientCodec) NewResponse(r io.Reader) (protocol.ClientResponseCodec, error) { return newClientResponseCodec(r) } func (cc *ClientCodec) NewRequestB(method string, args []interface{}, id interface{}) ([]byte, error) { params, err := convertParamsToStringArray(args) if nil != err { return nil, err } req := &clientRequest{ Version: Version, Method: method, Params: params, ID: id, } return json.Marshal(req) } func (cc *ClientCodec) NewResponseB(buf []byte) (protocol.ClientResponseCodec, error) { return newClientResponseCodecB(buf) }