Skip to content

Commit 5a99cc3

Browse files
committed
make the setting provider awaiting
Signed-off-by: vahid torkaman <[email protected]>
1 parent a5991cb commit 5a99cc3

File tree

2 files changed

+17
-24
lines changed

2 files changed

+17
-24
lines changed

OpenFeature/src/main/java/dev/openfeature/sdk/async/Extensions.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,26 @@ fun OpenFeatureClient.toAsync(): AsyncClient? {
2525
}
2626
}
2727

28+
suspend fun OpenFeatureAPI.setProviderAndAwaitReady(
29+
provider: FeatureProvider,
30+
dispatcher: CoroutineDispatcher
31+
) {
32+
OpenFeatureAPI.setProvider(provider)
33+
provider.awaitReady(dispatcher)
34+
}
35+
2836
internal fun FeatureProvider.observeProviderReady() = observe<OpenFeatureEvents.ProviderReady>()
2937
.onStart {
3038
if (isProviderReady()) {
3139
this.emit(OpenFeatureEvents.ProviderReady)
3240
}
3341
}
3442

35-
suspend fun OpenFeatureAPI.awaitProviderReady(
36-
dispatcher: CoroutineDispatcher = Dispatchers.IO
37-
) {
38-
val provider = getProvider()
39-
requireNotNull(provider)
40-
return provider.awaitProviderReady(dispatcher)
41-
}
42-
43-
fun OpenFeatureAPI.observeEvents(): Flow<OpenFeatureEvents>? {
44-
return getProvider()?.observe()
43+
inline fun <reified T : OpenFeatureEvents> OpenFeatureAPI.observeEvents(): Flow<T>? {
44+
return getProvider()?.observe<T>()
4545
}
4646

47-
suspend fun FeatureProvider.awaitProviderReady(
47+
suspend fun FeatureProvider.awaitReady(
4848
dispatcher: CoroutineDispatcher = Dispatchers.IO
4949
) = suspendCancellableCoroutine { continuation ->
5050
val coroutineScope = CoroutineScope(dispatcher)

README.md

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,12 @@ This will get a build from the head of the mentioned branch.
7575

7676
```kotlin
7777
// configure a provider and get client
78-
OpenFeatureAPI.setProvider(customProvider)
79-
val client = OpenFeatureAPI.getClient()
78+
coroutineScope.launch(Dispatchers.IO) {
79+
OpenFeatureAPI.setProviderAndAwaitReady(customProvider)
80+
val client = OpenFeatureAPI.getClient()
8081

8182
// get a bool flag value
82-
client.getBooleanValue("boolFlag", default = false)
83-
84-
// get a bool flag after "ready" signal from provider
85-
coroutineScope.launch {
86-
WithContext(Dispatchers.IO) {
87-
client.awaitProviderReady()
88-
}
89-
client.getBooleanValue("boolFlag", default = false)
83+
client.getBooleanValue("boolFlag", default = false)
9084
}
9185
```
9286

@@ -163,9 +157,8 @@ Some providers support additional events, such as `PROVIDER_CONFIGURATION_CHANGE
163157
Please refer to the documentation of the provider you're using to see what events are supported.
164158

165159
```kotlin
166-
OpenFeatureAPI.eventsObserver()
167-
.observe<OpenFeatureEvents.ProviderReady>()
168-
.collect {
160+
OpenFeatureAPI.observeEvents<OpenFeatureEvents.ProviderReady>()
161+
?.collect {
169162
// do something once the provider is ready
170163
}
171164
```

0 commit comments

Comments
 (0)