...
1
2
3 package example
4
5 import (
6 context "context"
7 ttrpc "github.com/containerd/ttrpc"
8 empty "github.com/golang/protobuf/ptypes/empty"
9 )
10
11 type ExampleService interface {
12 Method1(ctx context.Context, req *Method1Request) (*Method1Response, error)
13 Method2(ctx context.Context, req *Method1Request) (*empty.Empty, error)
14 }
15
16 func RegisterExampleService(srv *ttrpc.Server, svc ExampleService) {
17 srv.Register("ttrpc.example.v1.Example", map[string]ttrpc.Method{
18 "Method1": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) {
19 var req Method1Request
20 if err := unmarshal(&req); err != nil {
21 return nil, err
22 }
23 return svc.Method1(ctx, &req)
24 },
25 "Method2": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) {
26 var req Method1Request
27 if err := unmarshal(&req); err != nil {
28 return nil, err
29 }
30 return svc.Method2(ctx, &req)
31 },
32 })
33 }
34
35 type exampleClient struct {
36 client *ttrpc.Client
37 }
38
39 func NewExampleClient(client *ttrpc.Client) ExampleService {
40 return &exampleClient{
41 client: client,
42 }
43 }
44 func (c *exampleClient) Method1(ctx context.Context, req *Method1Request) (*Method1Response, error) {
45 var resp Method1Response
46 if err := c.client.Call(ctx, "ttrpc.example.v1.Example", "Method1", req, &resp); err != nil {
47 return nil, err
48 }
49 return &resp, nil
50 }
51 func (c *exampleClient) Method2(ctx context.Context, req *Method1Request) (*empty.Empty, error) {
52 var resp empty.Empty
53 if err := c.client.Call(ctx, "ttrpc.example.v1.Example", "Method2", req, &resp); err != nil {
54 return nil, err
55 }
56 return &resp, nil
57 }
58
View as plain text