From 6e1c004fea8d841f554c2e94ff39e1fcee94b4e3 Mon Sep 17 00:00:00 2001 From: Adam Scarr Date: Mon, 7 Aug 2017 22:57:06 +1000 Subject: [PATCH] Add Bind for constants --- combinator.go | 13 +++++++++++++ json/json.go | 20 ++++---------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/combinator.go b/combinator.go index f072913..e83a0c1 100644 --- a/combinator.go +++ b/combinator.go @@ -123,6 +123,19 @@ func Maybe(parser Parserish) Parser { }) } +func Bind(parser Parserish, val interface{}) Parser { + p := Parsify(parser) + + return func(ps *State) Node { + node := p(ps) + if ps.Errored() { + return node + } + node.Result = val + return node + } +} + func Map(parser Parserish, f func(n Node) Node) Parser { p := Parsify(parser) diff --git a/json/json.go b/json/json.go index 28889bd..13db8a5 100644 --- a/json/json.go +++ b/json/json.go @@ -27,25 +27,13 @@ var ( return Node{Result: ret} }) - _null = Map("null", func(n Node) Node { - return Node{Result: nil} - }) - - _true = Map("true", func(n Node) Node { - return Node{Result: true} - }) - - _false = Map("false", func(n Node) Node { - return Node{Result: false} - }) + _null = Bind("null", nil) + _true = Bind("true", true) + _false = Bind("false", false) _string = Map(String('"'), func(n Node) Node { return Node{Result: n.Token} }) - - Y = Map(&value, func(n Node) Node { - return Node{Result: n.Result} - }) ) func init() { @@ -53,7 +41,7 @@ func init() { } func Unmarshal(input string) (interface{}, error) { - result, remaining, err := ParseString(Y, input) + result, remaining, err := ParseString(value, input) if err != nil { return result, err