aboutsummaryrefslogtreecommitdiff
path: root/model/body.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--model/body.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/model/body.go b/model/body.go
new file mode 100644
index 0000000..b7b4a0c
--- /dev/null
+++ b/model/body.go
@@ -0,0 +1,28 @@
+package model
+
+import (
+ "errors"
+ "fmt"
+)
+
+type Body []any
+
+var ErrInvalidType = errors.New("invalid type")
+
+func (d Body) Execute(v Visitor) error {
+ for _, it := range d {
+ switch it := it.(type) {
+ case *Setting:
+ if err := v.VisitSetting(it.Key, it.Value); err != nil {
+ return err
+ }
+ case *Directive:
+ if err := v.VisitDirective(it.Name, it.Arguments, it.Body); err != nil {
+ return err
+ }
+ default:
+ return fmt.Errorf("%w: %t", ErrInvalidType, it)
+ }
+ }
+ return nil
+}