-
Notifications
You must be signed in to change notification settings - Fork 13
/
configwriter.go
116 lines (92 loc) · 2.68 KB
/
configwriter.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package jsonw
import (
"io"
"github.com/neilotoole/sq/cli/config"
"github.com/neilotoole/sq/cli/output"
"github.com/neilotoole/sq/cli/output/commonw"
"github.com/neilotoole/sq/libsq/core/options"
)
var _ output.ConfigWriter = (*configWriter)(nil)
// configWriter implements output.ConfigWriter.
type configWriter struct {
out io.Writer
pr *output.Printing
}
// NewConfigWriter returns a new output.ConfigWriter.
func NewConfigWriter(out io.Writer, pr *output.Printing) output.ConfigWriter {
return &configWriter{out: out, pr: pr}
}
// CacheLocation implements output.ConfigWriter.
func (w *configWriter) CacheLocation(loc string) error {
m := map[string]string{"location": loc}
return writeJSON(w.out, w.pr, m)
}
// CacheStat implements output.ConfigWriter.
func (w *configWriter) CacheStat(loc string, enabled bool, size int64) error {
type cacheInfo struct { //nolint:govet // field alignment
Location string `json:"location"`
Enabled bool `json:"enabled"`
Size *int64 `json:"size,omitempty"`
}
ci := cacheInfo{Location: loc, Enabled: enabled}
if size != -1 {
ci.Size = &size
}
return writeJSON(w.out, w.pr, ci)
}
// Location implements output.ConfigWriter.
func (w *configWriter) Location(loc string, origin config.Origin) error {
type cfgInfo struct {
Location string `json:"location"`
Origin config.Origin `json:"origin,omitempty"`
}
c := cfgInfo{
Location: loc,
Origin: origin,
}
return writeJSON(w.out, w.pr, c)
}
// Opt implements output.ConfigWriter.
func (w *configWriter) Opt(o options.Options, opt options.Opt) error {
if o == nil || opt == nil {
return nil
}
o2 := options.Options{opt.Key(): o[opt.Key()]}
if !w.pr.Verbose {
return writeJSON(w.out, w.pr, o2)
}
vo := commonw.NewVerboseOpt(opt, o2)
return writeJSON(w.out, w.pr, vo)
}
// Options implements output.ConfigWriter.
func (w *configWriter) Options(reg *options.Registry, o options.Options) error {
if len(o) == 0 && !w.pr.Verbose {
return nil
}
if !w.pr.Verbose {
return writeJSON(w.out, w.pr, o)
}
opts := reg.Opts()
m := map[string]commonw.VerboseOpt{}
for _, opt := range opts {
m[opt.Key()] = commonw.NewVerboseOpt(opt, o)
}
return writeJSON(w.out, w.pr, m)
}
// SetOption implements output.ConfigWriter.
func (w *configWriter) SetOption(o options.Options, opt options.Opt) error {
if !w.pr.Verbose {
return nil
}
vo := commonw.NewVerboseOpt(opt, o)
return writeJSON(w.out, w.pr, vo)
}
// UnsetOption implements output.ConfigWriter.
func (w *configWriter) UnsetOption(opt options.Opt) error {
if !w.pr.Verbose {
return nil
}
o := options.Options{opt.Key(): opt.GetAny(nil)}
vo := commonw.NewVerboseOpt(opt, o)
return writeJSON(w.out, w.pr, vo)
}