Claude Code 49175e0bd5 feat: include platformCode in error responses (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>
2026-03-25 22:56:39 +00:00

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/xerrors
  • code.nochebuena.dev/go/valid
Description
Typed handler adapters and JSON response helpers.
Readme MIT 51 KiB
2026-03-25 16:58:33 -06:00
Languages
Go 100%