summaryrefslogtreecommitdiff
path: root/config.go
blob: f90005518f8210ac2518be3e3bc16c7ceb95544a (plain)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package gomplate

import (
	"io"
	"os"
	"strings"

	"github.com/hairyhenderson/gomplate/v3/internal/config"
	"github.com/hairyhenderson/gomplate/v3/internal/iohelpers"
)

// Config - values necessary for rendering templates with gomplate.
// Mainly for use by the CLI
//
// Deprecated: this type will be phased out, internal/config.Config is used
// everywhere else, and will be exposed as API in a future version
type Config struct {
	Input       string
	InputFiles  []string
	InputDir    string
	ExcludeGlob []string
	OutputFiles []string
	OutputDir   string
	OutputMap   string
	OutMode     string
	Out         io.Writer

	DataSources       []string
	DataSourceHeaders []string
	Contexts          []string

	Plugins []string

	LDelim string
	RDelim string

	Templates []string
}

// defaults - sets any unset fields to their default value (if applicable)
func (o *Config) defaults() *Config {
	if o.OutputDir == "" {
		o.OutputDir = "."
	}
	if o.InputFiles == nil {
		o.InputFiles = []string{"-"}
	}
	if o.OutputFiles == nil {
		o.OutputFiles = []string{"-"}
	}
	if o.LDelim == "" {
		o.LDelim = "{{"
	}
	if o.RDelim == "" {
		o.RDelim = "}}"
	}
	return o
}

// nolint: gocyclo
func (o *Config) String() string {
	o.defaults()

	c := "input: "
	switch {
	case o.Input != "":
		c += "<arg>"
	case o.InputDir != "":
		c += o.InputDir
	default:
		c += strings.Join(o.InputFiles, ", ")
	}

	if len(o.ExcludeGlob) > 0 {
		c += "\nexclude: " + strings.Join(o.ExcludeGlob, ", ")
	}

	c += "\noutput: "
	switch {
	case o.InputDir != "" && o.OutputDir != ".":
		c += o.OutputDir
	case o.OutputMap != "":
		c += o.OutputMap
	default:
		c += strings.Join(o.OutputFiles, ", ")
	}

	if o.OutMode != "" {
		c += "\nchmod: " + o.OutMode
	}

	if len(o.DataSources) > 0 {
		c += "\ndatasources: " + strings.Join(o.DataSources, ", ")
	}
	if len(o.DataSourceHeaders) > 0 {
		c += "\ndatasourceheaders: " + strings.Join(o.DataSourceHeaders, ", ")
	}
	if len(o.Contexts) > 0 {
		c += "\ncontexts: " + strings.Join(o.Contexts, ", ")
	}

	if len(o.Plugins) > 0 {
		c += "\nplugins: " + strings.Join(o.Plugins, ", ")
	}

	if o.LDelim != "{{" {
		c += "\nleft_delim: " + o.LDelim
	}
	if o.RDelim != "}}" {
		c += "\nright_delim: " + o.RDelim
	}

	if len(o.Templates) > 0 {
		c += "\ntemplates: " + strings.Join(o.Templates, ", ")
	}
	return c
}

func (o *Config) toNewConfig() (*config.Config, error) {
	cfg := &config.Config{
		Input:       o.Input,
		InputFiles:  o.InputFiles,
		InputDir:    o.InputDir,
		ExcludeGlob: o.ExcludeGlob,
		OutputFiles: o.OutputFiles,
		OutputDir:   o.OutputDir,
		OutputMap:   o.OutputMap,
		OutMode:     o.OutMode,
		LDelim:      o.LDelim,
		RDelim:      o.RDelim,
		Templates:   o.Templates,
		Stdin:       os.Stdin,
		Stdout:      &iohelpers.NopCloser{Writer: o.Out},
		Stderr:      os.Stderr,
	}
	err := cfg.ParsePluginFlags(o.Plugins)
	if err != nil {
		return nil, err
	}
	err = cfg.ParseDataSourceFlags(o.DataSources, o.Contexts, o.DataSourceHeaders)
	if err != nil {
		return nil, err
	}
	return cfg, nil
}