Files
rdp-proxy/backend/internal/platform/httpx/json.go
T
2026-04-28 22:29:50 +03:00

46 lines
1.1 KiB
Go

package httpx
import (
"encoding/json"
"net/http"
)
func WriteJSON(w http.ResponseWriter, status int, payload any) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
_ = json.NewEncoder(w).Encode(payload)
}
func WriteError(w http.ResponseWriter, status int, message string) {
traceID := ensureTraceID(w)
WriteJSON(w, status, ErrorResponse{
Error: NewErrorMessage(status, message, nil, traceID),
})
}
func WriteErrorMessage(w http.ResponseWriter, status int, message any) {
traceID := ensureTraceID(w)
switch payload := message.(type) {
case string:
WriteJSON(w, status, ErrorResponse{
Error: NewErrorMessage(status, payload, nil, traceID),
})
case ErrorResponse:
payload.Error.TraceID = traceID
WriteJSON(w, status, payload)
case *ErrorResponse:
if payload == nil {
WriteJSON(w, status, ErrorResponse{
Error: NewErrorMessage(status, "", nil, traceID),
})
return
}
payload.Error.TraceID = traceID
WriteJSON(w, status, payload)
default:
WriteJSON(w, status, ErrorResponse{
Error: NewErrorMessage(status, "Request failed.", nil, traceID),
})
}
}