|
|
package jsonrpc
import ( "bytes" "context" "io" "log" "net/http" "net/http/httptest" "os"
"github.com/intel-go/fastjson" )
type ( EchoHandler struct{} EchoParams struct { Name string `json:"name"` } EchoResult struct { Message string `json:"message"` } )
func (h EchoHandler) ServeJSONRPC(c context.Context, params *fastjson.RawMessage) (interface{}, *Error) {
var p EchoParams if err := Unmarshal(params, &p); err != nil { return nil, err }
return EchoResult{ Message: "Hello, " + p.Name, }, nil }
func ExampleEchoHandler_ServeJSONRPC() {
mr := NewMethodRepository()
if err := mr.RegisterMethod("Main.Echo", EchoHandler{}, EchoParams{}, EchoResult{}); err != nil { log.Fatalln(err) }
http.Handle("/jrpc", mr) http.HandleFunc("/jrpc/debug", mr.ServeDebug)
srv := httptest.NewServer(http.DefaultServeMux) defer srv.Close()
resp, err := http.Post(srv.URL+"/jrpc", "application/json", bytes.NewBufferString(`{ "jsonrpc": "2.0", "method": "Main.Echo", "params": { "name": "John Doe" }, "id": "243a718a-2ebb-4e32-8cc8-210c39e8a14b" }`)) if err != nil { log.Fatalln(err) } defer resp.Body.Close() if _, err := io.Copy(os.Stdout, resp.Body); err != nil { log.Fatalln(err) }
// Output:
// {"id":"243a718a-2ebb-4e32-8cc8-210c39e8a14b","jsonrpc":"2.0","result":{"message":"Hello, John Doe"}}
}
|