-
Notifications
You must be signed in to change notification settings - Fork 4
/
api_selector.go
71 lines (60 loc) · 1.29 KB
/
api_selector.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
package dataextractor
import (
"github.com/insolar/assured-ledger/ledger-core/pulse"
"github.com/insolar/assured-ledger/ledger-core/reference"
"github.com/insolar/assured-ledger/ledger-core/vanilla/throw"
)
type Direction bool
const (
ToPresent = false
ToPast = true
)
//nolint:gosimple
func (v Direction) IsToPast() bool {
return v == ToPast
}
type Selector struct {
RootRef reference.Holder
ReasonRef reference.Holder
StartRef reference.Holder
StopRef reference.Holder
BranchMode BranchMode
Direction Direction
}
func (v Selector) GetSelectorRef() (bool, reference.Holder) {
switch {
case !reference.IsEmpty(v.StartRef):
return true, v.StartRef
case !reference.IsEmpty(v.StopRef):
return true, v.StopRef
case !reference.IsEmpty(v.RootRef):
return true, v.RootRef
case !reference.IsEmpty(v.ReasonRef):
return false, v.ReasonRef
default:
panic(throw.IllegalState())
}
}
type BranchMode uint8
const (
_ BranchMode = iota
IgnoreBranch
FollowBranch
IncludeBranch
)
type Config struct{
Selector Selector
Limiter Limiter
Output Output
Target pulse.Number
}
func (v Config) Ensure() {
switch {
case v.Limiter == nil:
panic(throw.IllegalValue())
case v.Output == nil:
panic(throw.IllegalValue())
case !v.Target.IsTimePulse():
panic(throw.IllegalValue())
}
}