-
Notifications
You must be signed in to change notification settings - Fork 1
/
bool.go
43 lines (36 loc) · 926 Bytes
/
bool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package pjson
import (
"fmt"
p "github.com/Dwarfartisan/goparsec2"
)
// Bool 是内置的 bool 类型
type Bool bool
// BoolParser 解析 bool
var BoolParser = p.Choice(p.Try(p.Str("true")), p.Try(p.Str("false"))).Bind(func(input interface{}) p.P {
return func(st p.State) (interface{}, error) {
switch input.(string) {
case "true":
return Bool(true), nil
case "false":
return Bool(false), nil
default:
return nil, fmt.Errorf("Unexpect bool token %v", input)
}
}
})
// var BoolParser = p.Do(func(st p.State) interface{} {
// f := p.Try(p.Bool).Exec(st)
// switch f.(string) {
// case "true":
// return Bool(true), nil
// case "false":
// return Bool(false), nil
// default:
// return nil, fmt.Errorf("Unexpect bool token %v", input)
// }
// })
// NullParser 解析 null
var NullParser = p.Str("null").Then(p.Return(nil))
// // Null 类型定义空值行为
// type Null struct {
// }