OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / go-kit / kit / examples / stringsvc3 / transport.go
1 package main
2
3 import (
4         "bytes"
5         "context"
6         "encoding/json"
7         "io/ioutil"
8         "net/http"
9
10         "github.com/go-kit/kit/endpoint"
11 )
12
13 func makeUppercaseEndpoint(svc StringService) endpoint.Endpoint {
14         return func(ctx context.Context, request interface{}) (interface{}, error) {
15                 req := request.(uppercaseRequest)
16                 v, err := svc.Uppercase(req.S)
17                 if err != nil {
18                         return uppercaseResponse{v, err.Error()}, nil
19                 }
20                 return uppercaseResponse{v, ""}, nil
21         }
22 }
23
24 func makeCountEndpoint(svc StringService) endpoint.Endpoint {
25         return func(ctx context.Context, request interface{}) (interface{}, error) {
26                 req := request.(countRequest)
27                 v := svc.Count(req.S)
28                 return countResponse{v}, nil
29         }
30 }
31
32 func decodeUppercaseRequest(_ context.Context, r *http.Request) (interface{}, error) {
33         var request uppercaseRequest
34         if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
35                 return nil, err
36         }
37         return request, nil
38 }
39
40 func decodeCountRequest(_ context.Context, r *http.Request) (interface{}, error) {
41         var request countRequest
42         if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
43                 return nil, err
44         }
45         return request, nil
46 }
47
48 func decodeUppercaseResponse(_ context.Context, r *http.Response) (interface{}, error) {
49         var response uppercaseResponse
50         if err := json.NewDecoder(r.Body).Decode(&response); err != nil {
51                 return nil, err
52         }
53         return response, nil
54 }
55
56 func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
57         return json.NewEncoder(w).Encode(response)
58 }
59
60 func encodeRequest(_ context.Context, r *http.Request, request interface{}) error {
61         var buf bytes.Buffer
62         if err := json.NewEncoder(&buf).Encode(request); err != nil {
63                 return err
64         }
65         r.Body = ioutil.NopCloser(&buf)
66         return nil
67 }
68
69 type uppercaseRequest struct {
70         S string `json:"s"`
71 }
72
73 type uppercaseResponse struct {
74         V   string `json:"v"`
75         Err string `json:"err,omitempty"`
76 }
77
78 type countRequest struct {
79         S string `json:"s"`
80 }
81
82 type countResponse struct {
83         V int `json:"v"`
84 }