Documentation
¶
Overview ¶
This package is aimed to reduce amount of boilerplate code when writing regular http.Handle. It provides simple and explicit API to define HTTP endpoints.
To install controller:
go get -u github.com/andriiyaremenko/controller
How to use: package main
import (
"net/http" "github.com/go-chi/chi/v5" "github.com/andriiyaremenko/controller"
)
// type definitions and other code..
func main() {
r := chi.NewRouter()
handle := func(r *http.Request) (ResponseModel, error) {
service := SomeService(r.Context())
result, err := service.Do()
if err != nil {
return result, err
}
return result, nil
}
r.Post(
"/", controller.
Respond[ResponseModel](handle).
With(controller.SuccessCode(http.StatusCreated)),
)
http.ListenAndServe(":3000", r)
}
```
Index ¶
- func ErrorHandle(matcher ErrorMatcher) func(Options)
- func ErrorWithCode[E any](httpCode int) func(Options)
- func ReadJSON[T any](req *http.Request) (*T, error)
- func ResponseWriter(w WriteResponse) func(Options)
- func SetDefaultErrorHandlers(handlers ...ErrorMatcher)
- func SetLogger(l Logger)
- func SuccessCode(code int) func(Options)
- type DecoratedResponse
- type ErrorMatcher
- type Logger
- type MatchError
- type MatchErrorRequest
- type Options
- type ReadRequestError
- type RecoveredError
- type Respond
- type WriteResponse
- type WriteResponseFn
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ErrorHandle ¶
func ErrorHandle(matcher ErrorMatcher) func(Options)
ErrorHandle checks if error is of E type and returns designated HTTP Status Code with transformed response using as callback if true.
func ErrorWithCode ¶
ErrorWithCode checks if error is of E type and returns designated HTTP Status Code with E instance as a response if true.
func SetDefaultErrorHandlers ¶
func SetDefaultErrorHandlers(handlers ...ErrorMatcher)
Types ¶
type DecoratedResponse ¶
type MatchError ¶
type MatchErrorRequest ¶
MatchErrorRequest transforms error to HTTP status code and response body.
type Options ¶
type Options interface {
SuccessCode(int)
ErrorHandlers(...ErrorMatcher)
WriteResponse(WriteResponse)
}
type ReadRequestError ¶
type ReadRequestError struct {
// contains filtered or unexported fields
}
If request payload reading failed - ReadRequestError is returned.
func (*ReadRequestError) Error ¶
func (err *ReadRequestError) Error() string
func (*ReadRequestError) Unwrap ¶
func (err *ReadRequestError) Unwrap() error
type RecoveredError ¶
func (*RecoveredError) Error ¶
func (err *RecoveredError) Error() string
func (*RecoveredError) Unwrap ¶
func (err *RecoveredError) Unwrap() error
type Respond ¶
Respond is http.Handler that utilizes generics to process request payload and reduce amount of boilerplate code.
type WriteResponse ¶
type WriteResponseFn ¶
Response writer type.
var WriteJSON WriteResponseFn = func(_ *http.Request, w http.ResponseWriter, data any, status int) { w.Header().Set("Content-Type", "application/json; charset=utf-8") w.WriteHeader(status) if data == nil { return } if err := json.NewEncoder(w).Encode(data); err != nil { logger().Error("failed to write JSON", "error", err) } }
Response writer to write JSON response in body with Content-Type "application/json; charset=utf-8" Header.
func (WriteResponseFn) Write ¶
func (fn WriteResponseFn) Write(r *http.Request, w http.ResponseWriter, value any, code int)
func (WriteResponseFn) WriteError ¶
func (fn WriteResponseFn) WriteError(r *http.Request, w http.ResponseWriter, err any, code int)