1package underscores 2 3import "context" 4import "encoding/json" 5import "errors" 6import "net/http" 7import "github.com/go-kit/kit/endpoint" 8import httptransport "github.com/go-kit/kit/transport/http" 9 10type Service struct { 11} 12 13func (s Service) Foo(ctx context.Context, i int) (int, error) { 14 panic(errors.New("not implemented")) 15} 16 17type FooRequest struct { 18 I int 19} 20type FooResponse struct { 21 I int 22 Err error 23} 24 25func MakeFooEndpoint(s Service) endpoint.Endpoint { 26 return func(ctx context.Context, request interface{}) (interface{}, error) { 27 req := request.(FooRequest) 28 i, err := s.Foo(ctx, req.I) 29 return FooResponse{I: i, Err: err}, nil 30 } 31} 32 33type Endpoints struct { 34 Foo endpoint.Endpoint 35} 36 37func NewHTTPHandler(endpoints Endpoints) http.Handler { 38 m := http.NewServeMux() 39 m.Handle("/foo", httptransport.NewServer(endpoints.Foo, DecodeFooRequest, EncodeFooResponse)) 40 return m 41} 42func DecodeFooRequest(_ context.Context, r *http.Request) (interface{}, error) { 43 var req FooRequest 44 err := json.NewDecoder(r.Body).Decode(&req) 45 return req, err 46} 47func EncodeFooResponse(_ context.Context, w http.ResponseWriter, response interface{}) error { 48 w.Header().Set("Content-Type", "application/json; charset=utf-8") 49 return json.NewEncoder(w).Encode(response) 50} 51