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