---
name: http_error_response
kind: function
lang: go
domain: infra
version: "1.0.0"
purity: impure
signature: "func HTTPErrorResponse(w http.ResponseWriter, err HTTPError)"
description: "Escribe un HTTPError como JSON en el ResponseWriter. Usa err.Status como status code HTTP y serializa los campos Code y Message en el body."
tags: [http, error, response, json, server, infra]
uses_functions: []
uses_types: [HTTPError_go_infra]
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [encoding/json, net/http]
params:
  - name: w
    desc: "ResponseWriter donde se escribe la respuesta de error"
  - name: err
    desc: "HTTPError con Status (codigo HTTP), Code (identificador maquina) y Message (texto legible)"
output: "escribe la respuesta de error JSON directamente en w, sin valor de retorno"
tested: true
tests: ["escribe el status code del HTTPError", "setea Content-Type application/json", "serializa Code y Message en el body JSON"]
test_file_path: "functions/infra/http_server_test.go"
file_path: "functions/infra/http_error_response.go"
---

## Ejemplo

```go
func createUser(w http.ResponseWriter, r *http.Request) {
    var user User
    if err := HTTPParseBody(r, &user, 1<<20); err != nil {
        HTTPErrorResponse(w, HTTPError{
            Status:  http.StatusBadRequest,
            Code:    "invalid_body",
            Message: err.Error(),
        })
        return
    }
    // ...
}
```

## Notas

Conveniente para APIs JSON que siempre retornan errores en formato estructurado. Se puede componer con HTTPParseBody: si el parse falla, llamar HTTPErrorResponse con 400. El body JSON tiene la forma `{"Status":400,"Code":"...","Message":"..."}`.
