<- Back to shtanton's homepage
aboutsummaryrefslogtreecommitdiff
path: root/walk/walk.go
diff options
context:
space:
mode:
Diffstat (limited to 'walk/walk.go')
-rw-r--r--walk/walk.go49
1 files changed, 43 insertions, 6 deletions
diff --git a/walk/walk.go b/walk/walk.go
index fc9e9de..3fba62f 100644
--- a/walk/walk.go
+++ b/walk/walk.go
@@ -7,7 +7,41 @@ import (
type PathSegment interface {}
+type OutputList interface {
+ outputList()
+}
+
+type OutputValueList []Value
+func (_ OutputValueList) outputList() {}
+
+type OutputRuneList []rune
+func (_ OutputRuneList) outputList() {}
+
+// Can be passed to .eat on a state
+type Edible interface {
+ edible()
+}
+
+type RuneEdible rune
+func (_ RuneEdible) edible() {}
+
+type Terminal int
+const (
+ ArrayEnd Terminal = iota
+ MapEnd
+ StringEnd
+)
+func (_ Terminal) edible() {}
+
+// Simple value
+// Has a literal
+type Scalar interface {
+ Value
+ scalar()
+}
+
type Value interface {
+ Edible
value()
Debug() string
}
@@ -17,6 +51,8 @@ func (_ NullValue) value() {}
func (_ NullValue) Debug() string {
return "null"
}
+func (_ NullValue) edible() {}
+func (_ NullValue) scalar() {}
type BoolValue bool
func (_ BoolValue) value() {}
@@ -26,24 +62,23 @@ func (b BoolValue) Debug() string {
}
return "false"
}
+func (_ BoolValue) edible() {}
+func (_ BoolValue) scalar() {}
type NumberValue float64
func (_ NumberValue) value() {}
func (n NumberValue) Debug() string {
return fmt.Sprintf("%v", float64(n))
}
-
-type RuneValue rune
-func (_ RuneValue) value() {}
-func (r RuneValue) Debug() string {
- return string(r)
-}
+func (_ NumberValue) edible() {}
+func (_ NumberValue) scalar() {}
type StringValue string
func (_ StringValue) value() {}
func (s StringValue) Debug() string {
return fmt.Sprintf("%q", string(s))
}
+func (_ StringValue) edible() {}
type ArrayElement struct {
Index int
@@ -66,6 +101,7 @@ func (array ArrayValue) Debug() string {
builder.WriteRune(']')
return builder.String()
}
+func (_ ArrayValue) edible() {}
type MapElement struct {
Key string
@@ -88,6 +124,7 @@ func (m MapValue) Debug() string {
builder.WriteRune('}')
return builder.String()
}
+func (_ MapValue) edible() {}
type WalkItem struct {
Value Value