Files
go-render/pretty_example_test.go
Jim Myhrberg 1b8fb22499 chore: correct typos and align struct field tags (#12)
Fixes typos in package documentation and variable names. Aligns 
struct field tags in examples and tests for better readability.
2025-06-11 03:15:29 +01:00

281 lines
6.3 KiB
Go

package render_test
import (
"encoding/xml"
"io"
"os"
"strings"
"github.com/jimeh/go-render"
)
func ExamplePretty_json() {
type Version struct {
Version string `json:"version" yaml:"version" xml:",chardata"`
Latest bool `json:"latest" yaml:"latest" xml:"latest,attr"`
Stable bool `json:"stable" yaml:"stable" xml:"stable,attr"`
}
type OutputList struct {
Current string `json:"current" yaml:"current" xml:"current"`
Versions []Version `json:"versions" yaml:"versions" xml:"version"`
XMLName xml.Name `json:"-" yaml:"-" xml:"versions-list"`
}
data := &OutputList{
Current: "1.2.2",
Versions: []Version{
{Version: "1.2.2", Stable: true, Latest: true},
{Version: "1.2.1", Stable: true},
{Version: "1.2.0", Stable: true},
{Version: "1.2.0-rc.0", Stable: false},
{Version: "1.1.0", Stable: true},
},
}
err := render.Pretty(os.Stdout, "json", data)
if err != nil {
panic(err)
}
// Output:
// {
// "current": "1.2.2",
// "versions": [
// {
// "version": "1.2.2",
// "latest": true,
// "stable": true
// },
// {
// "version": "1.2.1",
// "latest": false,
// "stable": true
// },
// {
// "version": "1.2.0",
// "latest": false,
// "stable": true
// },
// {
// "version": "1.2.0-rc.0",
// "latest": false,
// "stable": false
// },
// {
// "version": "1.1.0",
// "latest": false,
// "stable": true
// }
// ]
// }
}
func ExamplePretty_yaml() {
type Version struct {
Version string `json:"version" yaml:"version" xml:",chardata"`
Latest bool `json:"latest" yaml:"latest" xml:"latest,attr"`
Stable bool `json:"stable" yaml:"stable" xml:"stable,attr"`
}
type OutputList struct {
Current string `json:"current" yaml:"current" xml:"current"`
Versions []Version `json:"versions" yaml:"versions" xml:"version"`
XMLName xml.Name `json:"-" yaml:"-" xml:"versions-list"`
}
data := &OutputList{
Current: "1.2.2",
Versions: []Version{
{Version: "1.2.2", Stable: true, Latest: true},
{Version: "1.2.1", Stable: true},
{Version: "1.2.0", Stable: true},
{Version: "1.2.0-rc.0", Stable: false},
{Version: "1.1.0", Stable: true},
},
}
err := render.Pretty(os.Stdout, "yaml", data)
if err != nil {
panic(err)
}
// Output:
// current: 1.2.2
// versions:
// - version: 1.2.2
// latest: true
// stable: true
// - version: 1.2.1
// latest: false
// stable: true
// - version: 1.2.0
// latest: false
// stable: true
// - version: 1.2.0-rc.0
// latest: false
// stable: false
// - version: 1.1.0
// latest: false
// stable: true
}
func ExamplePretty_xml() {
type Version struct {
Version string `json:"version" yaml:"version" xml:",chardata"`
Latest bool `json:"latest" yaml:"latest" xml:"latest,attr"`
Stable bool `json:"stable" yaml:"stable" xml:"stable,attr"`
}
type OutputList struct {
Current string `json:"current" yaml:"current" xml:"current"`
Versions []Version `json:"versions" yaml:"versions" xml:"version"`
XMLName xml.Name `json:"-" yaml:"-" xml:"versions-list"`
}
data := &OutputList{
Current: "1.2.2",
Versions: []Version{
{Version: "1.2.2", Stable: true, Latest: true},
{Version: "1.2.1", Stable: true},
{Version: "1.2.0", Stable: true},
{Version: "1.2.0-rc.0", Stable: false},
{Version: "1.1.0", Stable: true},
},
}
// Create a new renderer that supports XML in addition to the default JSON,
// Text, and YAML formats.
renderer := render.NewWith("json", "text", "xml", "yaml")
err := renderer.Pretty(os.Stdout, "xml", data)
if err != nil {
panic(err)
}
// Output:
// <versions-list>
// <current>1.2.2</current>
// <version latest="true" stable="true">1.2.2</version>
// <version latest="false" stable="true">1.2.1</version>
// <version latest="false" stable="true">1.2.0</version>
// <version latest="false" stable="false">1.2.0-rc.0</version>
// <version latest="false" stable="true">1.1.0</version>
// </versions-list>
}
func ExamplePretty_textFromByteSlice() {
data := []byte("Hello, World!1")
err := render.Pretty(os.Stdout, "text", data)
if err != nil {
panic(err)
}
// Output:
// Hello, World!1
}
func ExamplePretty_textFromString() {
data := "Hello, World!"
err := render.Pretty(os.Stdout, "text", data)
if err != nil {
panic(err)
}
// Output:
// Hello, World!
}
func ExamplePretty_textFromIOReader() {
var data io.Reader = strings.NewReader("Hello, World!!!1")
err := render.Pretty(os.Stdout, "text", data)
if err != nil {
panic(err)
}
// Output:
// Hello, World!!!1
}
func ExamplePretty_textFromWriterTo() {
// The Version struct has a WriteTo method which writes a string
// representation of a version to an io.Writer:
//
// func (v *Version) WriteTo(w io.Writer) (int64, error) {
// s := fmt.Sprintf(
// "%s (stable: %t, latest: %t)", v.Version, v.Stable, v.Latest,
// )
// n, err := w.Write([]byte(s))
//
// return int64(n), err
// }
data := &Version{Version: "1.2.1", Stable: true, Latest: false}
err := render.Pretty(os.Stdout, "text", data)
if err != nil {
panic(err)
}
// Output:
// 1.2.1 (stable: true, latest: false)
}
func ExamplePretty_textFromStringer() {
// The User struct has a String method which returns a string representation
// of a user:
//
// func (ol *OutputList) String() string {
// buf := &strings.Builder{}
//
// for _, ver := range ol.Versions {
// if ol.Current == ver.Version {
// buf.WriteString("* ")
// } else {
// buf.WriteString(" ")
// }
//
// buf.WriteString(ver.Version)
// if !ver.Stable {
// buf.WriteString(" (pre-release)")
// }
// if ver.Latest {
// buf.WriteString(" (latest)")
// }
//
// buf.WriteByte('\n')
// }
//
// return buf.String()
// }
data := &OutputList{
Current: "1.2.2",
Versions: []Version{
{Version: "1.2.2", Stable: true, Latest: true},
{Version: "1.2.1", Stable: true},
{Version: "1.2.0", Stable: true},
{Version: "1.2.0-rc.0", Stable: false},
{Version: "1.1.0", Stable: true},
},
}
err := render.Pretty(os.Stdout, "text", data)
if err != nil {
panic(err)
}
// Output:
// * 1.2.2 (latest)
// 1.2.1
// 1.2.0
// 1.2.0-rc.0 (pre-release)
// 1.1.0
}