package api import ( "encoding/json" "net/http" ) // errorBody is the JSON envelope for failures on /api/*. Kept separate from // the Subsonic envelope so native clients don't have to parse two shapes. type errorBody struct { Error errorPayload `json:"error"` } type errorPayload struct { Code string `json:"code"` Message string `json:"message"` } // writeErr is the canonical way to emit a failure. Code is a stable // short-string clients can switch on; message is human-readable. func writeErr(w http.ResponseWriter, status int, code, message string) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) _ = json.NewEncoder(w).Encode(errorBody{Error: errorPayload{Code: code, Message: message}}) }