-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathconfig.go
98 lines (80 loc) · 2.19 KB
/
config.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
/*
Copyright The containerd Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"io/ioutil"
"log"
"github.com/pelletier/go-toml"
)
type config struct {
Version string
Generators []string
// Parameters are custom parameters to be passed to the generators.
// The parameter key must be the generator name with a table value
// of keys and string values to be passed.
// Example:
// [parameters.go-ttrpc]
// customkey = "somevalue"
Parameters map[string]map[string]string
Includes struct {
Before []string
Vendored []string
Packages []string
After []string
}
Packages map[string]string
Overrides []struct {
Prefixes []string
Generators []string
Parameters map[string]map[string]string
// TODO(stevvooe): We could probably support overriding of includes and
// package maps, but they don't seem to be as useful. Likely,
// overriding the package map is more useful but includes happen
// project-wide.
}
Descriptors []struct {
Prefix string
Target string
IgnoreFiles []string `toml:"ignore_files"`
}
}
func newDefaultConfig() config {
return config{
Includes: struct {
Before []string
Vendored []string
Packages []string
After []string
}{
Before: []string{"."},
After: []string{"/usr/local/include", "/usr/include"},
},
}
}
func readConfig(path string) (config, error) {
p, err := ioutil.ReadFile(path)
if err != nil {
log.Fatalln(err)
}
return readConfigFrom(p)
}
func readConfigFrom(p []byte) (config, error) {
c := newDefaultConfig()
if err := toml.Unmarshal(p, &c); err != nil {
log.Fatalln(err)
}
if len(c.Generators) == 0 {
c.Generators = []string{"go"}
}
return c, nil
}