diff --git a/OpenFeature/src/main/java/dev/openfeature/sdk/async/Extensions.kt b/OpenFeature/src/main/java/dev/openfeature/sdk/async/Extensions.kt index b7792ed..6d0a249 100644 --- a/OpenFeature/src/main/java/dev/openfeature/sdk/async/Extensions.kt +++ b/OpenFeature/src/main/java/dev/openfeature/sdk/async/Extensions.kt @@ -25,6 +25,14 @@ fun OpenFeatureClient.toAsync(): AsyncClient? { } } +suspend fun OpenFeatureAPI.setProviderAndAwaitReady( + provider: FeatureProvider, + dispatcher: CoroutineDispatcher +) { + OpenFeatureAPI.setProvider(provider) + provider.awaitReady(dispatcher) +} + internal fun FeatureProvider.observeProviderReady() = observe() .onStart { if (isProviderReady()) { @@ -32,19 +40,11 @@ internal fun FeatureProvider.observeProviderReady() = observe? { - return getProvider()?.observe() +inline fun OpenFeatureAPI.observeEvents(): Flow? { + return getProvider()?.observe() } -suspend fun FeatureProvider.awaitProviderReady( +suspend fun FeatureProvider.awaitReady( dispatcher: CoroutineDispatcher = Dispatchers.IO ) = suspendCancellableCoroutine { continuation -> val coroutineScope = CoroutineScope(dispatcher) diff --git a/README.md b/README.md index 951708c..9695ec0 100644 --- a/README.md +++ b/README.md @@ -75,18 +75,12 @@ This will get a build from the head of the mentioned branch. ```kotlin // configure a provider and get client -OpenFeatureAPI.setProvider(customProvider) -val client = OpenFeatureAPI.getClient() +coroutineScope.launch(Dispatchers.IO) { + OpenFeatureAPI.setProviderAndAwaitReady(customProvider) + val client = OpenFeatureAPI.getClient() // get a bool flag value -client.getBooleanValue("boolFlag", default = false) - -// get a bool flag after "ready" signal from provider -coroutineScope.launch { - WithContext(Dispatchers.IO) { - client.awaitProviderReady() - } - client.getBooleanValue("boolFlag", default = false) + client.getBooleanValue("boolFlag", default = false) } ``` @@ -163,9 +157,8 @@ Some providers support additional events, such as `PROVIDER_CONFIGURATION_CHANGE Please refer to the documentation of the provider you're using to see what events are supported. ```kotlin -OpenFeatureAPI.eventsObserver() - .observe() - .collect { +OpenFeatureAPI.observeEvents() + ?.collect { // do something once the provider is ready } ```