-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrange.go
More file actions
37 lines (30 loc) · 810 Bytes
/
range.go
File metadata and controls
37 lines (30 loc) · 810 Bytes
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
package constraints
import (
"fmt"
typecons "golang.org/x/exp/constraints"
)
func Range[ValueT typecons.Ordered](min, max ValueT) Constraint[ValueT] {
return &rangeConstraint[ValueT]{
inclusive: true,
min: min,
max: max,
}
}
type rangeConstraint[ValueT typecons.Ordered] struct {
inclusive bool //TODO: inclusiveMin & inclusiveMax
min ValueT
max ValueT
}
var (
_ Constraint[int] = rangeConstraint[int]{}
_ Constraint[int] = &rangeConstraint[int]{}
)
func (rc rangeConstraint[ValueT]) ConstraintDescription() string {
return fmt.Sprintf("from %v to %v", valueLiteralString(rc.min), valueLiteralString(rc.max))
}
func (rc rangeConstraint[ValueT]) IsValid(v ValueT) bool {
if rc.inclusive {
return v >= rc.min && v <= rc.max
}
return v > rc.min && v < rc.max
}