diff --git a/launchdarkly-server-sdk/src/client.rs b/launchdarkly-server-sdk/src/client.rs index 26a7c5a..a7a1a32 100644 --- a/launchdarkly-server-sdk/src/client.rs +++ b/launchdarkly-server-sdk/src/client.rs @@ -269,6 +269,16 @@ impl Client { Ok(true) } + /// Forcefully sets the client to initialized without making any outbound calls. + /// + /// This acts as a pseudo-offline mode, where the `DataStore` is still read from. This should only be used in + /// cases where the `DataStore` is managed outside of launchdarkly-server-sdk. + pub fn force_initialized(&self) { + self.started.store(true, Ordering::SeqCst); + self.init_state + .store(ClientInitState::Initialized as usize, Ordering::SeqCst); + } + /// This is an async method that will resolve once initialization is complete. /// Initialization being complete does not mean that initialization was a success. /// The return value from the method indicates if the client successfully initialized. diff --git a/launchdarkly-server-sdk/src/data_source_builders.rs b/launchdarkly-server-sdk/src/data_source_builders.rs index ec32390..eae1bdb 100644 --- a/launchdarkly-server-sdk/src/data_source_builders.rs +++ b/launchdarkly-server-sdk/src/data_source_builders.rs @@ -144,10 +144,13 @@ impl Default for StreamingDataSourceBuilder { } } +/// An implementation of DataSourceFactory that will not make any outbound calls. This should +/// only be used when filling a DataStore externally. #[derive(Clone)] pub struct NullDataSourceBuilder {} impl NullDataSourceBuilder { + /// Create a new [NullDataSourceBuilder] with all default values. pub fn new() -> Self { Self {} } diff --git a/launchdarkly-server-sdk/src/lib.rs b/launchdarkly-server-sdk/src/lib.rs index 06c791f..a3475d8 100644 --- a/launchdarkly-server-sdk/src/lib.rs +++ b/launchdarkly-server-sdk/src/lib.rs @@ -29,7 +29,8 @@ pub use client::Client; pub use client::{BuildError, StartError}; pub use config::{ApplicationInfo, BuildError as ConfigBuildError, Config, ConfigBuilder}; pub use data_source_builders::{ - BuildError as DataSourceBuildError, PollingDataSourceBuilder, StreamingDataSourceBuilder, + BuildError as DataSourceBuildError, NullDataSourceBuilder, PollingDataSourceBuilder, + StreamingDataSourceBuilder, }; pub use evaluation::{FlagDetail, FlagDetailConfig}; pub use events::event::MigrationOpEvent;