/
printer.go
85 lines (74 loc) · 1.72 KB
/
printer.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package printer
import (
"encoding/json"
"github.com/aegershman/cf-reverse-service-lookup-plugin/pkg/details"
"github.com/aegershman/cf-reverse-service-lookup-plugin/pkg/v2client"
"io"
"log"
"strings"
"github.com/olekukonko/tablewriter"
)
type Printer struct {
client *v2client.Client
writer io.Writer
serviceInstanceDetails []details.ServiceInstanceDetails
}
func NewPrinter(client *v2client.Client, writer io.Writer) *Printer {
return &Printer{
client: client,
writer: writer,
serviceInstanceDetails: make([]details.ServiceInstanceDetails, 0),
}
}
func (p *Printer) Print(formats []string, serviceInstanceDetails []details.ServiceInstanceDetails) {
p.serviceInstanceDetails = serviceInstanceDetails
if len(formats) == 0 {
p.asPlainText()
}
for _, f := range formats {
switch f {
case "table":
p.asTable()
case "json":
p.asJSON()
case "plain-text":
p.asPlainText()
}
}
}
func (p *Printer) asPlainText() {
for _, report := range p.serviceInstanceDetails {
fieldsJoined := strings.Join([]string{
report.Service.GUID,
report.Service.Name,
report.Organization.Name,
report.Space.Name,
}, "\n")
p.writer.Write([]byte(fieldsJoined))
}
}
func (p *Printer) asTable() {
table := tablewriter.NewWriter(p.writer)
table.SetHeader([]string{
"service_guid",
"service",
"org",
"space",
})
for _, report := range p.serviceInstanceDetails {
table.Append([]string{
report.Service.GUID,
report.Service.Name,
report.Organization.Name,
report.Space.Name,
})
}
table.Render()
}
func (p *Printer) asJSON() {
j, err := json.Marshal(p.serviceInstanceDetails)
if err != nil {
log.Fatalln(err)
}
p.writer.Write(j)
}