diff options
| author | 2026-03-09 23:05:42 +0300 | |
|---|---|---|
| committer | 2026-03-09 23:05:42 +0300 | |
| commit | 00394a80501960ad26787b5c44435ed5ed67ad84 (patch) | |
| tree | 672eb918c552c858f32e9533dc3799af6b75769f /visitor | |
| parent | '-' sign in words accepted (diff) | |
| download | conf-00394a80501960ad26787b5c44435ed5ed67ad84.tar.gz conf-00394a80501960ad26787b5c44435ed5ed67ad84.tar.bz2 conf-00394a80501960ad26787b5c44435ed5ed67ad84.tar.xz conf-00394a80501960ad26787b5c44435ed5ed67ad84.zip | |
Полностью переписал библиотеку. Перевёл с EBNF на PEG.v0.1.0
Diffstat (limited to '')
| -rw-r--r-- | visitor/default.go | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/visitor/default.go b/visitor/default.go deleted file mode 100644 index d8c8172..0000000 --- a/visitor/default.go +++ /dev/null @@ -1,63 +0,0 @@ -package visitor - -import ( - "errors" - "fmt" - "strings" - - "go.neonxp.ru/conf/model" -) - -var ( - ErrEmptyQuery = errors.New("empty query") - ErrNoChildKey = errors.New("no child key") -) - -func NewDefault() *Default { - return &Default{ - vars: map[string]model.Values{}, - children: map[string]*Default{}, - args: model.Values{}, - } -} - -// Default просто собирает рекурсивно все переменные в дерево. -// На самом деле, для большинства сценариев конфигов его должно хватить. -type Default struct { - vars map[string]model.Values - children map[string]*Default - args model.Values -} - -func (p *Default) VisitDirective(ident string, args model.Values, body model.Body) error { - p.children[ident] = NewDefault() - p.children[ident].args = args - return body.Execute(p.children[ident]) -} - -func (p *Default) VisitSetting(key string, values model.Values) error { - p.vars[key] = values - - return nil -} - -func (p *Default) Get(path string) (model.Values, error) { - splitPath := strings.SplitN(path, ".", 2) - switch len(splitPath) { - case 1: - if v, ok := p.vars[splitPath[0]]; ok { - return v, nil - } - if child, ok := p.children[splitPath[0]]; ok { - return child.args, nil - } - return nil, fmt.Errorf("%w: %s", ErrNoChildKey, splitPath[0]) - case 2: - if child, ok := p.children[splitPath[0]]; ok { - return child.Get(splitPath[1]) - } - return nil, fmt.Errorf("%w: %s", ErrNoChildKey, splitPath[0]) - default: - return nil, ErrEmptyQuery - } -} |
