diff options
Diffstat (limited to 'walk/walk.go')
-rw-r--r-- | walk/walk.go | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/walk/walk.go b/walk/walk.go index 19180b4..1df7a6e 100644 --- a/walk/walk.go +++ b/walk/walk.go @@ -16,12 +16,39 @@ const ( MapBegin MapEnd ) +func (value TerminalValue) Pieces(out chan<- Datum) { + out<-value +} + type ValueNull struct {} +func (value ValueNull) Pieces(out chan<- Datum) { + out<-value +} type ValueBool bool +func (value ValueBool) Pieces(out chan<- Datum) { + out<-value +} type ValueNumber float64 +func (value ValueNumber) Pieces(out chan<- Datum) { + out<-value +} + +type StartString struct {} +type EndString struct {} type ValueString string +func (value ValueString) Pieces(out chan<- Datum) { + out<-StartString{} + for _, char := range value { + out<-char + } + out<-EndString{} +} -type WalkValue interface {} +type Datum interface {} + +type WalkValue interface { + Pieces(out chan<- Datum) +} type WalkItem struct { Value WalkValue @@ -297,7 +324,7 @@ func jsonOutValue(in *WalkItemStream, indent int, doIndent bool) WalkValue { jsonOutMap(in, indent) return nil default: - return token + return token.Value } default: panic("Invalid WalkValue") |