...
1 package ldbuilders
2
3 import (
4 "github.com/launchdarkly/go-sdk-common/v3/ldattr"
5 "github.com/launchdarkly/go-sdk-common/v3/ldcontext"
6 "github.com/launchdarkly/go-sdk-common/v3/ldvalue"
7 "github.com/launchdarkly/go-server-sdk-evaluation/v2/ldmodel"
8 )
9
10
11 type SegmentBuilder struct {
12 segment ldmodel.Segment
13 }
14
15
16 type SegmentRuleBuilder struct {
17 rule ldmodel.SegmentRule
18 }
19
20
21 func NewSegmentBuilder(key string) *SegmentBuilder {
22 return &SegmentBuilder{ldmodel.Segment{Key: key}}
23 }
24
25
26 func (b *SegmentBuilder) Build() ldmodel.Segment {
27 s := b.segment
28 ldmodel.PreprocessSegment(&s)
29 return s
30 }
31
32
33 func (b *SegmentBuilder) AddRule(r *SegmentRuleBuilder) *SegmentBuilder {
34 b.segment.Rules = append(b.segment.Rules, r.Build())
35 return b
36 }
37
38
39 func (b *SegmentBuilder) Excluded(keys ...string) *SegmentBuilder {
40 b.segment.Excluded = keys
41 return b
42 }
43
44
45 func (b *SegmentBuilder) Included(keys ...string) *SegmentBuilder {
46 b.segment.Included = keys
47 return b
48 }
49
50
51 func (b *SegmentBuilder) IncludedContextKind(kind ldcontext.Kind, keys ...string) *SegmentBuilder {
52 b.segment.IncludedContexts = append(b.segment.IncludedContexts,
53 ldmodel.SegmentTarget{ContextKind: kind, Values: keys})
54 return b
55 }
56
57
58 func (b *SegmentBuilder) ExcludedContextKind(kind ldcontext.Kind, keys ...string) *SegmentBuilder {
59 b.segment.ExcludedContexts = append(b.segment.ExcludedContexts,
60 ldmodel.SegmentTarget{ContextKind: kind, Values: keys})
61 return b
62 }
63
64
65 func (b *SegmentBuilder) Version(value int) *SegmentBuilder {
66 b.segment.Version = value
67 return b
68 }
69
70
71 func (b *SegmentBuilder) Salt(value string) *SegmentBuilder {
72 b.segment.Salt = value
73 return b
74 }
75
76
77
78 func (b *SegmentBuilder) Unbounded(value bool) *SegmentBuilder {
79 b.segment.Unbounded = value
80 return b
81 }
82
83
84 func (b *SegmentBuilder) UnboundedContextKind(kind ldcontext.Kind) *SegmentBuilder {
85 b.segment.UnboundedContextKind = kind
86 return b
87 }
88
89
90 func (b *SegmentBuilder) Generation(value int) *SegmentBuilder {
91 b.segment.Generation = ldvalue.NewOptionalInt(value)
92 return b
93 }
94
95
96 func NewSegmentRuleBuilder() *SegmentRuleBuilder {
97 return &SegmentRuleBuilder{}
98 }
99
100
101 func (b *SegmentRuleBuilder) Build() ldmodel.SegmentRule {
102 return b.rule
103 }
104
105
106
107 func (b *SegmentRuleBuilder) BucketBy(attr string) *SegmentRuleBuilder {
108 b.rule.BucketBy = ldattr.NewLiteralRef(attr)
109 return b
110 }
111
112
113 func (b *SegmentRuleBuilder) BucketByRef(attr ldattr.Ref) *SegmentRuleBuilder {
114 b.rule.BucketBy = attr
115 return b
116 }
117
118
119 func (b *SegmentRuleBuilder) Clauses(clauses ...ldmodel.Clause) *SegmentRuleBuilder {
120 b.rule.Clauses = clauses
121 return b
122 }
123
124
125 func (b *SegmentRuleBuilder) ID(id string) *SegmentRuleBuilder {
126 b.rule.ID = id
127 return b
128 }
129
130
131 func (b *SegmentRuleBuilder) RolloutContextKind(kind ldcontext.Kind) *SegmentRuleBuilder {
132 b.rule.RolloutContextKind = kind
133 return b
134 }
135
136
137 func (b *SegmentRuleBuilder) Weight(value int) *SegmentRuleBuilder {
138 b.rule.Weight = ldvalue.NewOptionalInt(value)
139 return b
140 }
141
View as plain text