Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jimeh/go-render
A simple and flexible solution to render a value to a io.Writer using different formats based on a format string argument.
https://github.com/jimeh/go-render
go golang golang-module golang-package marshaling render
Last synced: 11 days ago
JSON representation
A simple and flexible solution to render a value to a io.Writer using different formats based on a format string argument.
- Host: GitHub
- URL: https://github.com/jimeh/go-render
- Owner: jimeh
- License: mit
- Created: 2024-03-17T20:41:18.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-03-25T22:03:15.000Z (9 months ago)
- Last Synced: 2024-12-09T10:48:13.725Z (18 days ago)
- Topics: go, golang, golang-module, golang-package, marshaling, render
- Language: Go
- Homepage: https://pkg.go.dev/github.com/jimeh/go-render
- Size: 97.7 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
go-render
A simple and flexible solution to render a value to aio.Writer
using different formats based on a format string argument.
Designed around using a custom type/struct to render your output. Thanks to Go's
marshaling interfaces, you get JSON, YAML, and XML support almost for free.
While plain text output is supported by the type implementing `io.Reader`,
`io.WriterTo`, `fmt.Stringer`, and `error` interfaces, or by simply being a type
which can easily be type cast to a byte slice.Originally intended to easily implement CLI tools which can output their data as
plain text, as well as JSON/YAML with a simple switch of a format string. But it
can just as easily render to any `io.Writer`.The package is designed to be flexible and extensible with a sensible set of
defaults accessible via package level functions. You can create your own
`Renderer` for custom formats, or create new handlers that support custom
formats.## Import
```go
import "github.com/jimeh/go-render"
```## Usage
Basic usage to render a value to various formats into a `io.Writer`:
```go
version := &Version{Version: "1.2.1", Stable: true, Latest: false}err = render.Pretty(w, "text", version)
// 1.2.1 (stable: true, latest: false)err = render.Pretty(w, "json", version)
// {
// "version": "1.2.1",
// "latest": false,
// "stable": true
// }err = render.Compact(w, "json", version)
// {"version":"1.2.1","latest":false,"stable":true}err = render.Pretty(w, "yaml", version)
// version: 1.2.1
// latest: false
// stable: trueerr = render.Pretty(w, "xml", version)
// 1.2.1
```The above assumes the following `Version` struct:
```go
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"`
}func (v *Version) String() string {
return fmt.Sprintf(
"%s (stable: %t, latest: %t)", v.Version, v.Stable, v.Latest,
)
}
```## Documentation
Please see the
[Go Reference](https://pkg.go.dev/github.com/jimeh/go-render#section-documentation)
for documentation and further examples.## License
[MIT](https://github.com/jimeh/go-render/blob/main/LICENSE)