/
exporter.go
65 lines (56 loc) · 1.4 KB
/
exporter.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
package porta
import (
"fmt"
"io/ioutil"
"os"
"path"
"github.com/containerum/chkit/pkg/model"
)
type Exporter struct {
OutFile string `desc:"output file" flag:"export-file"`
OutputFormat string `desc:"output format, json/yaml" flag:"output o"`
}
func (exporter Exporter) ExporterActivated() bool {
return exporter.OutFile != "" || exporter.OutputFormat != ""
}
func (exporter Exporter) renderFunc() func(renderer model.Renderer) ([]byte, error) {
switch exporter.OutputFormat {
case "json":
return renderJSON
case "yaml", "yml":
return renderYAML
default:
var ext = path.Ext(exporter.OutFile)
switch {
case exporter.OutFile == "":
return renderTable
case ext == ".yaml", ext == ".yml":
return renderYAML
default:
return renderJSON
}
}
}
func (exporter Exporter) Export(data model.Renderer) error {
var b, err = exporter.renderFunc()(data)
if err != nil {
return err
}
if exporter.OutFile == "" {
_, err = fmt.Printf("%s", b)
return err
}
return ioutil.WriteFile(exporter.OutFile, b, os.ModePerm)
}
func renderJSON(renderer model.Renderer) ([]byte, error) {
var data, err = renderer.RenderJSON()
return []byte(data), err
}
func renderYAML(renderer model.Renderer) ([]byte, error) {
var data, err = renderer.RenderYAML()
return []byte(data), err
}
func renderTable(renderer model.Renderer) ([]byte, error) {
var data = renderer.RenderTable()
return []byte(data), nil
}