1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| package command
|
| import (
| "encoding/json"
| "fmt"
| "strings"
| )
|
| // Format some raw data for output. For better or worse, this currently forces
| // the passed data object to implement fmt.Stringer, since it's pretty hard to
| // implement a canonical *-to-string function.
| func formatOutput(data interface{}, format string) ([]byte, error) {
| var out string
|
| switch format {
|
| case "json":
| jsonout, err := json.MarshalIndent(data, "", " ")
| if err != nil {
| return nil, err
| }
| out = string(jsonout)
|
| case "text":
| out = data.(fmt.Stringer).String()
|
| default:
| return nil, fmt.Errorf("Invalid output format \"%s\"", format)
|
| }
| return []byte(prepareOutput(out)), nil
| }
|
| // Apply some final formatting to make sure we don't end up with extra newlines
| func prepareOutput(in string) string {
| return strings.TrimSpace(string(in))
| }
|
|