diff options
Diffstat (limited to '')
| -rw-r--r-- | model/doc.go | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/model/doc.go b/model/doc.go index 76f03e4..9c13a4c 100644 --- a/model/doc.go +++ b/model/doc.go @@ -1,18 +1,41 @@ package model -type Doc []any +type Doc struct { + items []any + vars map[string]Values + commands map[string]Commands +} -type Assignment struct { - Key string - Value []Value +func New(cap int) *Doc { + return &Doc{ + items: make([]any, 0, cap), + vars: make(map[string]Values, cap), + commands: make(map[string]Commands, cap), + } } -type Command struct { - Name string - Arguments []Value - Body Doc +func (d *Doc) AppendAssignment(e *Assignment) { + d.items = append(d.items, e) + d.vars[e.Key] = append(d.vars[e.Key], e.Value...) } -type Value any +func (d *Doc) AppendCommand(c *Command) { + d.items = append(d.items, c) + d.commands[c.Name] = append(d.commands[c.Name], c) +} -type Word string +func (d *Doc) Vars() map[string]Values { + return d.vars +} + +func (d *Doc) Get(key string) Values { + return d.vars[key] +} + +func (d *Doc) Commands(name string) Commands { + return d.commands[name] +} + +func (d *Doc) Items() []any { + return d.items +} |
