func/cmd/format.go

53 lines
1.1 KiB
Go

package cmd
import (
"fmt"
"io"
)
type Format string
const (
Human Format = "human" // Headers, indentation, justification etc.
Plain = "plain" // Suitable for cli automation via sed/awk etc.
JSON = "json" // Technically a ⊆ yaml, but no one likes yaml.
XML = "xml"
YAML = "yaml"
URL = "url"
)
// formatter is any structure which has methods for serialization.
type Formatter interface {
Human(io.Writer) error
Plain(io.Writer) error
JSON(io.Writer) error
XML(io.Writer) error
YAML(io.Writer) error
URL(io.Writer) error
}
// write to the output the output of the formatter's appropriate serilization function.
// the command to exit with value 2.
func write(out io.Writer, s Formatter, formatName string) {
var err error
switch Format(formatName) {
case Human:
err = s.Human(out)
case Plain:
err = s.Plain(out)
case JSON:
err = s.JSON(out)
case XML:
err = s.XML(out)
case YAML:
err = s.YAML(out)
case URL:
err = s.URL(out)
default:
err = fmt.Errorf("format not recognized: %v", formatName)
}
if err != nil {
panic(err)
}
}