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  }