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

28
writer_to.go Normal file
View File

@@ -0,0 +1,28 @@
package render
import (
"fmt"
"io"
)
// WriterTo is a renderer that renders a value to an io.Writer using the
// WriteTo method.
type WriterTo struct{}
var _ Renderer = (*WriterTo)(nil)
// Render renders a value to an io.Writer using the WriteTo method. If the value
// does not implement io.WriterTo, ErrCannotRender is returned.
func (wt *WriterTo) Render(w io.Writer, v any) error {
x, ok := v.(io.WriterTo)
if !ok {
return ErrCannotRender
}
_, err := x.WriteTo(w)
if err != nil {
return fmt.Errorf("%w: %w", Err, err)
}
return nil
}