-
Notifications
You must be signed in to change notification settings - Fork 0
/
c_min.go
85 lines (72 loc) · 1.69 KB
/
c_min.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package constraint
import (
schema "github.com/jsightapi/jsight-schema-core"
"github.com/jsightapi/jsight-schema-core/bytes"
"github.com/jsightapi/jsight-schema-core/errs"
"github.com/jsightapi/jsight-schema-core/json"
)
type Min struct {
min *json.Number
rawValue bytes.Bytes
exclusive bool
}
var (
_ Constraint = Min{}
_ Constraint = (*Min)(nil)
_ LiteralValidator = Min{}
_ LiteralValidator = (*Min)(nil)
)
func NewMin(ruleValue bytes.Bytes) *Min {
number, err := json.NewNumber(ruleValue)
if err != nil {
panic(err)
}
return &Min{
rawValue: ruleValue,
min: number,
}
}
func (Min) IsJsonTypeCompatible(t json.Type) bool {
return t == json.TypeInteger || t == json.TypeFloat
}
func (Min) Type() Type {
return MinConstraintType
}
func (c Min) String() string {
str := MinConstraintType.String() + ": " + c.min.String()
if c.exclusive {
return str + " (exclusive: true)"
}
return str
}
func (c *Min) SetExclusive(exclusive bool) {
c.exclusive = exclusive
}
func (c *Min) Exclusive() bool {
return c.exclusive
}
func (c Min) Validate(value bytes.Bytes) {
jsonNumber, err := json.NewNumber(value)
if err != nil {
panic(err)
}
if c.exclusive {
if c.min.GreaterThanOrEqual(jsonNumber) {
panic(errs.ErrConstraintValidation.F(
MinConstraintType.String(),
c.min.String(),
"(exclusive)",
))
}
} else {
if c.min.GreaterThan(jsonNumber) {
panic(errs.ErrConstraintValidation.F(MinConstraintType.String(), c.min.String(), ""))
}
}
}
func (c Min) ASTNode() schema.RuleASTNode {
return newRuleASTNode(schema.TokenTypeNumber, c.rawValue.String(), schema.RuleASTNodeSourceManual)
}
func (c *Min) Value() *json.Number {
return c.min
}