feat(text): expand supported value types

This commit is contained in:
2024-03-23 21:05:38 +00:00
parent 7632b1119c
commit 5247fbd90b
2 changed files with 161 additions and 10 deletions

37
text.go
View File

@@ -5,19 +5,50 @@ import (
"io"
)
// Text is a renderer that writes the given value to the writer as is. It
// supports rendering the following types as plain text:
//
// - []byte
// - []rune
// - string
// - int, int8, int16, int32, int64
// - uint, uint8, uint16, uint32, uint64
// - float32, float64
// - bool
// - io.Reader
// - io.WriterTo
// - fmt.Stringer
// - error
//
// If the value is of any other type, a ErrCannotRender error will be returned.
type Text struct{}
var _ FormatRenderer = (*Text)(nil)
// Render writes the given value to the writer as text.
func (t *Text) Render(w io.Writer, v any) error {
var err error
switch x := v.(type) {
case fmt.Stringer:
_, err = w.Write([]byte(x.String()))
case []byte:
_, err = w.Write(x)
case []rune:
_, err = w.Write([]byte(string(x)))
case string:
_, err = w.Write([]byte(x))
case int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64,
float32, float64, bool:
_, err = fmt.Fprintf(w, "%v", x)
case io.Reader:
_, err = io.Copy(w, x)
case io.WriterTo:
_, err = x.WriteTo(w)
case fmt.Stringer:
_, err = w.Write([]byte(x.String()))
case error:
_, err = w.Write([]byte(x.Error()))
default:
return ErrCannotRender
return fmt.Errorf("%w: %T", ErrCannotRender, v)
}
if err != nil {