...

Source file src/github.com/launchdarkly/go-server-sdk-evaluation/v2/ldbuilders/segment_builder.go

Documentation: github.com/launchdarkly/go-server-sdk-evaluation/v2/ldbuilders

     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  // SegmentBuilder provides a builder pattern for Segment.
    11  type SegmentBuilder struct {
    12  	segment ldmodel.Segment
    13  }
    14  
    15  // SegmentRuleBuilder provides a builder pattern for SegmentRule.
    16  type SegmentRuleBuilder struct {
    17  	rule ldmodel.SegmentRule
    18  }
    19  
    20  // NewSegmentBuilder creates a SegmentBuilder.
    21  func NewSegmentBuilder(key string) *SegmentBuilder {
    22  	return &SegmentBuilder{ldmodel.Segment{Key: key}}
    23  }
    24  
    25  // Build returns the configured Segment.
    26  func (b *SegmentBuilder) Build() ldmodel.Segment {
    27  	s := b.segment
    28  	ldmodel.PreprocessSegment(&s)
    29  	return s
    30  }
    31  
    32  // AddRule adds a rule to the segment.
    33  func (b *SegmentBuilder) AddRule(r *SegmentRuleBuilder) *SegmentBuilder {
    34  	b.segment.Rules = append(b.segment.Rules, r.Build())
    35  	return b
    36  }
    37  
    38  // Excluded sets the segment's Excluded list.
    39  func (b *SegmentBuilder) Excluded(keys ...string) *SegmentBuilder {
    40  	b.segment.Excluded = keys
    41  	return b
    42  }
    43  
    44  // Included sets the segment's Included list.
    45  func (b *SegmentBuilder) Included(keys ...string) *SegmentBuilder {
    46  	b.segment.Included = keys
    47  	return b
    48  }
    49  
    50  // IncludedContextKind adds a target list to the segment's IncludedContexts.
    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  // ExcludedContextKind adds a target to the segment's ExcludedContexts.
    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  // Version sets the segment's Version property.
    65  func (b *SegmentBuilder) Version(value int) *SegmentBuilder {
    66  	b.segment.Version = value
    67  	return b
    68  }
    69  
    70  // Salt sets the segment's Salt property.
    71  func (b *SegmentBuilder) Salt(value string) *SegmentBuilder {
    72  	b.segment.Salt = value
    73  	return b
    74  }
    75  
    76  // Unbounded sets the segment's Unbounded property. "Unbounded segment" is the historical name for
    77  // a big segment.
    78  func (b *SegmentBuilder) Unbounded(value bool) *SegmentBuilder {
    79  	b.segment.Unbounded = value
    80  	return b
    81  }
    82  
    83  // UnboundedContextKind sets the segment's UnboundedContextKind property.
    84  func (b *SegmentBuilder) UnboundedContextKind(kind ldcontext.Kind) *SegmentBuilder {
    85  	b.segment.UnboundedContextKind = kind
    86  	return b
    87  }
    88  
    89  // Generation sets the segment's Generation property.
    90  func (b *SegmentBuilder) Generation(value int) *SegmentBuilder {
    91  	b.segment.Generation = ldvalue.NewOptionalInt(value)
    92  	return b
    93  }
    94  
    95  // NewSegmentRuleBuilder creates a SegmentRuleBuilder.
    96  func NewSegmentRuleBuilder() *SegmentRuleBuilder {
    97  	return &SegmentRuleBuilder{}
    98  }
    99  
   100  // Build returns the configured SegmentRule.
   101  func (b *SegmentRuleBuilder) Build() ldmodel.SegmentRule {
   102  	return b.rule
   103  }
   104  
   105  // BucketBy sets the rule's BucketBy property. The attr parameter is assumed to be a simple attribute name,
   106  // rather than a path reference.
   107  func (b *SegmentRuleBuilder) BucketBy(attr string) *SegmentRuleBuilder {
   108  	b.rule.BucketBy = ldattr.NewLiteralRef(attr)
   109  	return b
   110  }
   111  
   112  // BucketByRef sets the rule's BucketBy property using the ldattr.Ref type.
   113  func (b *SegmentRuleBuilder) BucketByRef(attr ldattr.Ref) *SegmentRuleBuilder {
   114  	b.rule.BucketBy = attr
   115  	return b
   116  }
   117  
   118  // Clauses sets the rule's list of clauses.
   119  func (b *SegmentRuleBuilder) Clauses(clauses ...ldmodel.Clause) *SegmentRuleBuilder {
   120  	b.rule.Clauses = clauses
   121  	return b
   122  }
   123  
   124  // ID sets the rule's ID property.
   125  func (b *SegmentRuleBuilder) ID(id string) *SegmentRuleBuilder {
   126  	b.rule.ID = id
   127  	return b
   128  }
   129  
   130  // RolloutContextKind sets the rule's RolloutContextKind property.
   131  func (b *SegmentRuleBuilder) RolloutContextKind(kind ldcontext.Kind) *SegmentRuleBuilder {
   132  	b.rule.RolloutContextKind = kind
   133  	return b
   134  }
   135  
   136  // Weight sets the rule's Weight property.
   137  func (b *SegmentRuleBuilder) Weight(value int) *SegmentRuleBuilder {
   138  	b.rule.Weight = ldvalue.NewOptionalInt(value)
   139  	return b
   140  }
   141  

View as plain text