Files
job-search/internal/httpx/problem.go
T
bwilliams 465358609a Naming, layout and comments: descriptive full-word names, one item per line in wrapped calls and literals, and doc comments on exported names
Short and single-letter names in application code become full words (tests
keep theirs). Wrapped calls, signatures and composite literals put one item
per line, and one-line function bodies are expanded. Exported names and
groups of constants get doc comments, and comments refer to the renamed
identifiers.
2026-10-15 16:12:56 +01:00

35 lines
1002 B
Go

// Package httpx holds small HTTP helpers shared by middleware and handlers.
package httpx
import (
"encoding/json"
"net/http"
)
// Problem is an RFC 9457 problem details body.
type Problem struct {
Type string `json:"type,omitempty"`
Status int `json:"status"`
Title string `json:"title"`
Detail string `json:"detail,omitempty"`
Instance string `json:"instance,omitempty"`
RequestID string `json:"requestId,omitempty"`
}
// WriteProblem writes a problem+json error response.
func WriteProblem(w http.ResponseWriter, r *http.Request, status int, detail string) {
problem := Problem{
Type: "about:blank",
Title: http.StatusText(status),
Status: status,
Detail: detail,
}
if r != nil {
problem.RequestID = RequestID(r.Context())
}
w.Header().Set("Content-Type", "application/problem+json")
w.Header().Set("X-Content-Type-Options", "nosniff")
w.WriteHeader(status)
json.NewEncoder(w).Encode(problem) //nolint:errcheck,gosec // the client may have gone
}