-
Notifications
You must be signed in to change notification settings - Fork 0
/
dynamicdurationproperty.go
66 lines (55 loc) · 1.42 KB
/
dynamicdurationproperty.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
package vaquita
import "time"
type DynamicDurationProperty struct {
defaultValue time.Duration
unit time.Duration
property *DynamicProperty
}
func newDynamicDurationProperty(p *DynamicProperty, defaultValue time.Duration, unit time.Duration) *DynamicDurationProperty {
return &DynamicDurationProperty{
defaultValue: defaultValue,
property: p,
unit: unit,
}
}
func (p *DynamicDurationProperty) Name() string {
return p.property.Name()
}
func (p *DynamicDurationProperty) Get() time.Duration {
return time.Duration(p.property.intValueWithDefault(int(p.defaultValue/p.unit))) * p.unit
}
func (p *DynamicDurationProperty) HasValue() bool {
_, err := p.property.intValue()
return err == nil
}
type ChainedDurationProperty struct {
prop DurationProperty
next DurationProperty
}
func NewChainedDurationProperty(f *PropertyFactory, name string, unit time.Duration, next DurationProperty) DurationProperty {
return &ChainedDurationProperty{
prop: f.GetDurationProperty(name, 0, unit),
next: next,
}
}
func (p *ChainedDurationProperty) Name() string {
if p.prop.HasValue() {
return p.prop.Name()
} else {
return p.next.Name()
}
}
func (p *ChainedDurationProperty) Get() time.Duration {
if p.prop.HasValue() {
return p.prop.Get()
} else {
return p.next.Get()
}
}
func (p *ChainedDurationProperty) HasValue() bool {
if p.prop.HasValue() {
return true
} else {
return p.next.HasValue()
}
}