v0.10.0
- Error(w, err) now extracts PlatformCode() from *xerrors.Err and includes "platformCode" in the JSON body when set; omitted otherwise - errorBody updated to accept platformCode as an explicit parameter - Upgraded code.nochebuena.dev/go/xerrors dependency to v0.10.0 - Added two new tests: platformCode included when set, omitted when absent Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Reviewed-on: #1 Reviewed-by: Rene Nochebuena <rene@noreply.nochebuena.dev> Co-authored-by: Claude Code <claude@nochebuena.dev> Co-committed-by: Claude Code <claude@nochebuena.dev>
httputil
Typed HTTP handler adapters and response helpers for stdlib net/http.
Install
go get code.nochebuena.dev/go/httputil
Typed handlers
// JSON body + validation + typed response
r.Post("/orders", httputil.Handle(validator, svc.CreateOrder))
// No request body (GET / DELETE)
r.Get("/orders/{id}", httputil.HandleNoBody(svc.GetOrder))
// Request body, no response body (204)
r.Delete("/orders/{id}", httputil.HandleEmpty(validator, svc.DeleteOrder))
// Manual handler with centralised error mapping
r.Get("/raw", httputil.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error {
data, err := svc.Load(r.Context(), chi.URLParam(r, "id"))
if err != nil {
return err
}
return httputil.JSON(w, http.StatusOK, data)
}))
Error mapping
xerrors.Code → HTTP status:
| Code | Status |
|---|---|
ErrInvalidInput |
400 |
ErrUnauthorized |
401 |
ErrPermissionDenied |
403 |
ErrNotFound |
404 |
ErrAlreadyExists |
409 |
ErrInternal |
500 |
ErrNotImplemented |
501 |
ErrUnavailable |
503 |
ErrDeadlineExceeded |
504 |
| unknown | 500 |
Error response body:
{"code": "NOT_FOUND", "message": "record not found"}
Fields from xerrors.Err are merged into the top-level response object.
Dependencies
code.nochebuena.dev/go/xerrorscode.nochebuena.dev/go/valid
Releases
2
Release v0.10.0
Latest
Languages
Go
100%