mirror of https://github.com/knative/func.git
53 lines
1.1 KiB
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)
|
|
}
|
|
}
|