-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathdoc.go
84 lines (83 loc) · 3.31 KB
/
doc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright 2018 Adam S Levy
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
// Package jsonrpc2 is a complete and strictly conforming implementation of the
// JSON-RPC 2.0 protocol for both clients and servers.
//
// The full specification can be found at https://www.jsonrpc.org.
//
// Clients
//
// The simplest way to make a JSON-RPC 2.0 request is to use the provided
// Client.Request.
//
// var c jsonrpc2.Client
// params := []float64{1, 2, 3}
// var result int
// err := c.Request(nil, "http://localhost:8080", "sum", params, &result)
// if _, ok := err.(jsonrpc2.Error); ok {
// // received Error Request
// }
// if err != nil {
// // some JSON marshaling or network error
// }
// fmt.Printf("The sum of %v is %v.\n", params, result)
//
// For clients that do not wish to use the provided Client, the Request and
// Response types can be used directly.
//
// req, _ := json.Marshal(jsonrpc2.Request{Method: "subtract",
// Params: []int{5, 1},
// ID: 0,
// })
// httpRes, _ := http.Post("www.example.com", "application/json",
// bytes.NewReader(req))
// resBytes, _ := ioutil.ReadAll(httpRes.Body)
// res := jsonrpc2.Response{Result: &MyCustomResultType{}, ID: new(int)}
// json.Unmarshal(respBytes, &res)
//
// Servers
//
// Servers define their own MethodFuncs and associate them with a name in a
// MethodMap that is passed to HTTPRequestHandler() to return a corresponding
// http.HandlerFunc. See HTTPRequestHandler for more details.
//
// func getUser(ctx context.Context, params json.RawMessage) interface{} {
// var u User
// if err := json.Unmarshal(params, &u); err != nil {
// return jsonrpc2.InvalidParams(err)
// }
// conn, err := mydbpkg.GetDBConn()
// if err != nil {
// // The handler will recover, print debug info if enabled, and
// // return an Internal Error to the client.
// panic(err)
// }
// if err := u.Select(conn); err != nil {
// return jsonrpc2.NewError(-30000, "user not found", u.ID)
// }
// return u
// }
//
// func StartServer() {
// methods := jsonrpc2.MethodMap{"version": versionMethod}
// http.ListenAndServe(":8080", jsonrpc2.HTTPRequestHandler(methods,
// log.New(os.Stderr, "", 0)))
// }
package jsonrpc2