feat(render): experimental package to render arbitrary values to different formats

This commit is contained in:
2024-03-17 20:40:14 +00:00
commit 2b28f96bad
20 changed files with 1098 additions and 0 deletions

27
format.go Normal file
View File

@@ -0,0 +1,27 @@
package render
import (
"io"
)
// FormatRenderer is a renderer that delegates rendering to another renderer
// based on a format value.
type FormatRenderer struct {
Renderers map[string]Renderer
}
// Render renders a value to an io.Writer using the specified format. If the
// format is not supported, ErrCannotRender is returned.
//
// If the format is supported, but the value cannot be rendered to the format,
// the error returned by the renderer is returned. In most cases this will be
// ErrCannotRender, but it could be a different error if the renderer returns
// one.
func (r *FormatRenderer) Render(w io.Writer, format string, v any) error {
renderer, ok := r.Renderers[format]
if ok {
return renderer.Render(w, v)
}
return ErrCannotRender
}