-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathiparse.go
94 lines (73 loc) · 1.68 KB
/
iparse.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
package xparse
type IDev interface {
ToggleDevMode(b bool)
VerifyKeys() []string
}
type IConfig interface {
RawInfo(args ...string) map[string]any
}
type IData interface {
BindPresetData(dat map[string]any)
AppendPresetData(data map[string]any)
LoadRootSelection([]byte)
GetParsedData(keys ...string) any
DataAsJSON(args ...any) (string, error)
MustDataAsJSON(args ...any) string
PrettifyJSONData(args ...any) error
DataAsYaml(args ...any) (string, error)
MustDataAsYaml(args ...any) string
MustMandatoryFields(got, want []string)
PostDoParse()
ExtraInfo() map[string]any
}
type IParser interface {
IConfig
IDev
IData
DoParse()
}
func DoParse(parser IParser, opts ...ParseOptFunc) any {
opt := &ParseOpts{
promptCfg: NewPromptConfig(),
}
bindParseOpts(opt, opts...)
parser.BindPresetData(opt.preset)
parser.ToggleDevMode(true)
UpdateRefiners(parser, WithRefPromptConfig(opt.promptCfg))
parser.DoParse()
// parser.PostDoParse()
return parser.GetParsedData()
}
type ParseOpts struct {
dataAsSlice bool
preset map[string]any
rootKey string
promptCfg *PromptConfig
}
type ParseOptFunc func(o *ParseOpts)
func bindParseOpts(opt *ParseOpts, opts ...ParseOptFunc) {
for _, f := range opts {
f(opt)
}
}
func WithDataAsSlice(b bool) ParseOptFunc {
return func(o *ParseOpts) {
o.dataAsSlice = b
}
}
// WithPresetData: used to bind page level data
func WithPresetData(preset map[string]any) ParseOptFunc {
return func(o *ParseOpts) {
o.preset = preset
}
}
func WithRootKey(s string) ParseOptFunc {
return func(o *ParseOpts) {
o.rootKey = s
}
}
func WithPromptConfig(cfg *PromptConfig) ParseOptFunc {
return func(o *ParseOpts) {
o.promptCfg = cfg
}
}