longganhua
2019-07-18 472dde8470716ff9f719d1739298af4570c7ebda
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))
}