@@ -21,21 +21,40 @@ import cats.effect.{Async, Resource}
21
21
import cats .~>
22
22
import com .launchdarkly .sdk .server .interfaces .{FlagValueChangeEvent , FlagValueChangeListener }
23
23
import com .launchdarkly .sdk .server .{LDClient , LDConfig }
24
- import com .launchdarkly .sdk .{LDUser , LDValue }
24
+ import com .launchdarkly .sdk .{LDContext , LDUser , LDValue }
25
25
import fs2 ._
26
26
27
27
trait LaunchDarklyClient [F [_]] {
28
- def boolVariation (featureKey : String , user : LDUser , defaultValue : Boolean ): F [Boolean ]
29
28
30
- def stringVariation (featureKey : String , user : LDUser , defaultValue : String ): F [String ]
29
+ def boolVariation (featureKey : String , context : LDContext , defaultValue : Boolean ): F [Boolean ]
31
30
32
- def intVariation (featureKey : String , user : LDUser , defaultValue : Int ): F [Int ]
31
+ final def boolVariation (featureKey : String , user : LDUser , defaultValue : Boolean ): F [Boolean ] =
32
+ boolVariation(featureKey, LDContext .fromUser(user), defaultValue)
33
33
34
- def doubleVariation (featureKey : String , user : LDUser , defaultValue : Double ): F [Double ]
34
+ def stringVariation (featureKey : String , context : LDContext , defaultValue : String ): F [String ]
35
35
36
- def jsonVariation (featureKey : String , user : LDUser , defaultValue : LDValue ): F [LDValue ]
36
+ final def stringVariation (featureKey : String , user : LDUser , defaultValue : String ): F [String ] =
37
+ stringVariation(featureKey, LDContext .fromUser(user), defaultValue)
37
38
38
- def listen (featureKey : String , user : LDUser ): Stream [F , FlagValueChangeEvent ]
39
+ def intVariation (featureKey : String , context : LDContext , defaultValue : Int ): F [Int ]
40
+
41
+ final def intVariation (featureKey : String , user : LDUser , defaultValue : Int ): F [Int ] =
42
+ intVariation(featureKey, LDContext .fromUser(user), defaultValue)
43
+
44
+ def doubleVariation (featureKey : String , context : LDContext , defaultValue : Double ): F [Double ]
45
+
46
+ final def doubleVariation (featureKey : String , user : LDUser , defaultValue : Double ): F [Double ] =
47
+ doubleVariation(featureKey, LDContext .fromUser(user), defaultValue)
48
+
49
+ def jsonVariation (featureKey : String , context : LDContext , defaultValue : LDValue ): F [LDValue ]
50
+
51
+ final def jsonVariation (featureKey : String , user : LDUser , defaultValue : LDValue ): F [LDValue ] =
52
+ jsonVariation(featureKey, LDContext .fromUser(user), defaultValue)
53
+
54
+ def listen (featureKey : String , context : LDContext ): Stream [F , FlagValueChangeEvent ]
55
+
56
+ final def listen (featureKey : String , user : LDUser ): Stream [F , FlagValueChangeEvent ] =
57
+ listen(featureKey, LDContext .fromUser(user))
39
58
40
59
def flush : F [Unit ]
41
60
@@ -54,17 +73,20 @@ object LaunchDarklyClient {
54
73
override def unsafeWithJavaClient [A ](f : LDClient => A ): F [A ] =
55
74
F .blocking(f(ldClient))
56
75
57
- override def listen (featureKey : String , user : LDUser ): Stream [F , FlagValueChangeEvent ] =
76
+ override def listen (
77
+ featureKey : String ,
78
+ context : LDContext ,
79
+ ): Stream [F , FlagValueChangeEvent ] =
58
80
Stream .eval(F .delay(ldClient.getFlagTracker)).flatMap { tracker =>
59
- Stream .resource(Dispatcher [F ]).flatMap { dispatcher =>
81
+ Stream .resource(Dispatcher .sequential [F ]).flatMap { dispatcher =>
60
82
Stream .eval(Queue .unbounded[F , FlagValueChangeEvent ]).flatMap { q =>
61
83
val listener = new FlagValueChangeListener {
62
84
override def onFlagValueChange (event : FlagValueChangeEvent ): Unit =
63
85
dispatcher.unsafeRunSync(q.offer(event))
64
86
}
65
87
66
88
Stream .bracket(
67
- F .delay(tracker.addFlagValueChangeListener(featureKey, user , listener))
89
+ F .delay(tracker.addFlagValueChangeListener(featureKey, context , listener))
68
90
)(listener => F .delay(tracker.removeFlagChangeListener(listener))) >>
69
91
Stream .fromQueueUnterminated(q)
70
92
}
@@ -77,20 +99,36 @@ object LaunchDarklyClient {
77
99
self =>
78
100
protected def unsafeWithJavaClient [A ](f : LDClient => A ): F [A ]
79
101
80
- override def boolVariation (featureKey : String , user : LDUser , default : Boolean ): F [Boolean ] =
81
- unsafeWithJavaClient(_.boolVariation(featureKey, user, default))
82
-
83
- override def stringVariation (featureKey : String , user : LDUser , default : String ): F [String ] =
84
- unsafeWithJavaClient(_.stringVariation(featureKey, user, default))
85
-
86
- override def intVariation (featureKey : String , user : LDUser , default : Int ): F [Int ] =
87
- unsafeWithJavaClient(_.intVariation(featureKey, user, default))
88
-
89
- override def doubleVariation (featureKey : String , user : LDUser , default : Double ): F [Double ] =
90
- unsafeWithJavaClient(_.doubleVariation(featureKey, user, default))
91
-
92
- override def jsonVariation (featureKey : String , user : LDUser , default : LDValue ): F [LDValue ] =
93
- unsafeWithJavaClient(_.jsonValueVariation(featureKey, user, default))
102
+ override def boolVariation (
103
+ featureKey : String ,
104
+ context : LDContext ,
105
+ default : Boolean ,
106
+ ): F [Boolean ] =
107
+ unsafeWithJavaClient(_.boolVariation(featureKey, context, default))
108
+
109
+ override def stringVariation (
110
+ featureKey : String ,
111
+ context : LDContext ,
112
+ default : String ,
113
+ ): F [String ] =
114
+ unsafeWithJavaClient(_.stringVariation(featureKey, context, default))
115
+
116
+ override def intVariation (featureKey : String , context : LDContext , default : Int ): F [Int ] =
117
+ unsafeWithJavaClient(_.intVariation(featureKey, context, default))
118
+
119
+ override def doubleVariation (
120
+ featureKey : String ,
121
+ context : LDContext ,
122
+ default : Double ,
123
+ ): F [Double ] =
124
+ unsafeWithJavaClient(_.doubleVariation(featureKey, context, default))
125
+
126
+ override def jsonVariation (
127
+ featureKey : String ,
128
+ context : LDContext ,
129
+ default : LDValue ,
130
+ ): F [LDValue ] =
131
+ unsafeWithJavaClient(_.jsonValueVariation(featureKey, context, default))
94
132
95
133
override def flush : F [Unit ] = unsafeWithJavaClient(_.flush())
96
134
@@ -99,8 +137,8 @@ object LaunchDarklyClient {
99
137
self.unsafeWithJavaClient(f)
100
138
)
101
139
102
- override def listen (featureKey : String , user : LDUser ): Stream [G , FlagValueChangeEvent ] =
103
- self.listen(featureKey, user ).translate(fk)
140
+ override def listen (featureKey : String , context : LDContext ): Stream [G , FlagValueChangeEvent ] =
141
+ self.listen(featureKey, context ).translate(fk)
104
142
105
143
override def flush : G [Unit ] = fk(self.flush)
106
144
}
0 commit comments