Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

Awesome Lists containing this project

README

        


go-render



A simple and flexible solution to render a value to a io.Writer
using different formats based on a format string argument.


GitHub tag (latest SemVer)
Go Reference
GitHub issues
GitHub pull requests
Coverage
License Status

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: true

err = 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)