github.com/vseinstrumentiru/lego@v1.0.2/pkg/lehttp/handler.go (about) 1 package lehttp 2 3 import ( 4 "context" 5 "github.com/go-kit/kit/endpoint" 6 kithttp "github.com/go-kit/kit/transport/http" 7 appkithttp "github.com/sagikazarmark/appkit/transport/http" 8 kitxendpoint "github.com/sagikazarmark/kitx/endpoint" 9 kitxhttp "github.com/sagikazarmark/kitx/transport/http" 10 "net/http" 11 ) 12 13 type Handler interface { 14 Handle(ctx context.Context, request interface{}) (response interface{}, err error) 15 Decode(context.Context, *http.Request) (request interface{}, err error) 16 Encode(context.Context, http.ResponseWriter, interface{}) error 17 Middleware() []endpoint.Middleware 18 } 19 20 var errorEncoder = kitxhttp.NewJSONProblemErrorResponseEncoder(appkithttp.NewDefaultProblemConverter()) 21 22 func JSONResponseEncoder(ctx context.Context, w http.ResponseWriter, resp interface{}, code int) error { 23 return kitxhttp.JSONResponseEncoder(ctx, w, kitxhttp.WithStatusCode(resp, code)) 24 } 25 26 func New(handler Handler, options []kithttp.ServerOption) http.Handler { 27 return NewHandler( 28 handler.Handle, 29 handler.Decode, 30 handler.Encode, 31 handler.Middleware(), 32 options, 33 ) 34 } 35 36 func NewHandler( 37 e endpoint.Endpoint, 38 dec kithttp.DecodeRequestFunc, 39 enc kithttp.EncodeResponseFunc, 40 middleware []endpoint.Middleware, 41 options []kithttp.ServerOption, 42 ) http.Handler { 43 if len(middleware) > 0 { 44 e = kitxendpoint.Combine(middleware...)(e) 45 } 46 47 return kithttp.NewServer( 48 e, 49 dec, 50 kitxhttp.ErrorResponseEncoder(enc, errorEncoder), 51 options..., 52 ) 53 }