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
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only
package generator
import (
"io/fs"
"qtcli/util"
"gopkg.in/yaml.v3"
)
// config file format related
type ConfigData struct {
Version string `yaml:"version"`
Files []ConfigEntryFile `yaml:"files"`
Global ConfigEntryGlobal `yaml:"global"`
}
type ConfigEntryFile struct {
In string `yaml:"in"`
Out string `yaml:"out"`
FieldsList []ConfigEntryFields `yaml:"fields"`
When string `yaml:"when"`
}
type ConfigEntryGlobal struct {
FieldsList []ConfigEntryFields `yaml:"fields"`
Header string `yaml:"header"`
}
type ConfigEntryFields util.StringAnyMap
func (g *ConfigEntryFields) expandBy(
expander *util.TemplateExpander,
) (util.StringAnyMap, error) {
all := util.StringAnyMap{}
for name, expr := range *g {
if str, ok := expr.(string); ok {
expanded, err := expander.Name(name).RunString(str)
if err != nil {
return util.StringAnyMap{}, err
}
all[name] = expanded
} else {
all[name] = expr
}
}
return all, nil
}
func readConfig(targetFS fs.FS, filePath string) (ConfigData, error) {
raw, err := util.ReadAllFromFS(targetFS, filePath)
if err != nil {
return ConfigData{}, err
}
var config ConfigData
if err := yaml.Unmarshal(raw, &config); err != nil {
return ConfigData{}, err
}
return config, nil
}
|