File size: 1,120 Bytes
1f10f31 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package request
import (
"encoding/json"
"errors"
"io"
"net/http"
"github.com/openmeterio/openmeter/api/v3/apierrors"
)
func ParseBody(r *http.Request, payload any) *apierrors.BaseAPIError {
decoder := json.NewDecoder(r.Body)
if err := decoder.Decode(&payload); err != nil {
return apierrors.NewBadRequestError(r.Context(), err,
apierrors.InvalidParameters{
apierrors.InvalidParameter{
Reason: "unable to parse body",
Source: apierrors.InvalidParamSourceBody,
},
},
)
}
return nil
}
// ParseOptionalBody parses the request body if present, leaving payload unchanged if the body is empty.
func ParseOptionalBody(r *http.Request, payload any) *apierrors.BaseAPIError {
if r.Body == nil {
return nil
}
decoder := json.NewDecoder(r.Body)
if err := decoder.Decode(&payload); err != nil {
if errors.Is(err, io.EOF) {
return nil
}
return apierrors.NewBadRequestError(r.Context(), err,
apierrors.InvalidParameters{
apierrors.InvalidParameter{
Reason: "unable to parse body",
Source: apierrors.InvalidParamSourceBody,
},
},
)
}
return nil
}
|