diff --git a/http_request_renderable.go b/http_request_renderable.go index 66700c8..8d5f5c0 100644 --- a/http_request_renderable.go +++ b/http_request_renderable.go @@ -19,3 +19,26 @@ type RequestRenderableFunc func(*http.Request) (AsRenderable, error) func (f RequestRenderableFunc) RequestRenderable(r *http.Request) (AsRenderable, error) { return f(r) } + +// HTTPHandler implements http.Handler for a RequestRenderable. +type HTTPHandler struct { + Renderable RequestRenderable +} + +// ServeHTTP implements http.Handler. +func (h HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + renderable, err := h.Renderable.RequestRenderable(r) + if err != nil { + panic(err) + } + + html, err := Render(r.Context(), renderable) + if err != nil { + panic(err) + } + + _, err = w.Write([]byte(html)) + if err != nil { + panic(err) + } +}