// LessThanNil 实现三值 Less func LessThanNil(x interface{}) p.P { return func(st p.State) (interface{}, error) { val, _ := p.One(st) if x == nil || val == nil { return false, nil } return nil, st.Trap("expect nil value but: %v", val) } }
// ListValue 检查 state 中下一个值是否是列表 func ListValue(st p.State) (interface{}, error) { val, err := p.One(st) if err == nil { if _, ok := val.(List); ok { return val, nil } return nil, fmt.Errorf("expect a list value but %v ", val) } return nil, fmt.Errorf("expect a list value but error: %v", err) }
// TimeValue 判断 state 中下一个元素是否为 time.Time func TimeValue(st p.State) (interface{}, error) { val, err := p.One(st) if err == nil { if _, ok := val.(tm.Time); ok { return val, nil } return nil, fmt.Errorf("expect a time value but: %v", err) } return nil, fmt.Errorf("expect a time value but error: %v", err) }
// FalseIfHasNil 实现一个 is nil 判断 func FalseIfHasNil(st p.State) (interface{}, error) { for { val, err := p.One(st) if err != nil { if err == io.EOF { return nil, fmt.Errorf("False If Nil Error: Found EOF.") } return nil, err } if val == nil { return false, err } } }