forked from hashicorp/serf
/
output.go
37 lines (29 loc) · 854 Bytes
/
output.go
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.(fmt.Stringer), "", " ")
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))
}