From d3137132380bc75b6e942fd8c79304a7a78080c0 Mon Sep 17 00:00:00 2001 From: diamondburned Date: Wed, 19 Jun 2024 13:36:07 -0700 Subject: [PATCH] Add UnencodableEncoder --- encoder.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/encoder.go b/encoder.go index 2eac8da..89928b1 100644 --- a/encoder.go +++ b/encoder.go @@ -3,6 +3,8 @@ package hrt import ( "encoding/json" "net/http" + + "github.com/pkg/errors" ) // DefaultEncoder is the default encoder used by the router. It decodes GET @@ -33,6 +35,8 @@ type CombinedEncoder struct { Decoder Decoder } +var _ Encoder = CombinedEncoder{} + // Encode implements the Encoder interface. func (e CombinedEncoder) Encode(w http.ResponseWriter, v any) error { return e.Encoder.Encode(w, v) @@ -43,6 +47,20 @@ func (e CombinedEncoder) Decode(r *http.Request, v any) error { return e.Decoder.Decode(r, v) } +// UnencodableEncoder is an encoder that can only decode and not encode. +// It wraps an existing decoder. +// Calling Encode will return a 500 error, as it is considered a bug to return +// anything. +type UnencodableEncoder struct { + Decoder +} + +var _ Encoder = UnencodableEncoder{} + +func (e UnencodableEncoder) Encode(w http.ResponseWriter, v any) error { + return WrapHTTPError(http.StatusInternalServerError, errors.New("cannot encode")) +} + // JSONEncoder is an encoder that encodes and decodes JSON. var JSONEncoder Encoder = jsonEncoder{}