error: allow storing extra headers in RespError

This commit is contained in:
Tulir Asokan 2026-01-26 01:20:30 +02:00
commit b041eb924e

View file

@ -140,7 +140,8 @@ type RespError struct {
Err string
ExtraData map[string]any
StatusCode int
StatusCode int
ExtraHeader map[string]string
}
func (e *RespError) UnmarshalJSON(data []byte) error {
@ -168,6 +169,9 @@ func (e RespError) Write(w http.ResponseWriter) {
if statusCode == 0 {
statusCode = http.StatusInternalServerError
}
for key, value := range e.ExtraHeader {
w.Header().Set(key, value)
}
exhttp.WriteJSONResponse(w, statusCode, &e)
}
@ -190,6 +194,18 @@ func (e RespError) WithExtraData(extraData map[string]any) RespError {
return e
}
func (e RespError) WithExtraHeader(key, value string) RespError {
e.ExtraHeader = exmaps.NonNilClone(e.ExtraHeader)
e.ExtraHeader[key] = value
return e
}
func (e RespError) WithExtraHeaders(headers map[string]string) RespError {
e.ExtraHeader = exmaps.NonNilClone(e.ExtraHeader)
maps.Copy(e.ExtraHeader, headers)
return e
}
// Error returns the errcode and error message.
func (e RespError) Error() string {
return e.ErrCode + ": " + e.Err