Skip to main content

launchdarkly_server_sdk/
data_sources.rs

1//! Types for implementing custom FDv2 data sources.
2//!
3//! This module is experimental and not subject to semantic versioning. Its API
4//! may change in any release.
5//!
6//! # Examples
7//!
8//! Implement a custom synchronizer and add it to a data system.
9//! ```
10//! use launchdarkly_server_sdk::data_sources::{
11//!     DataSourceBuildContext, FDv2SourceEvent, FDv2SourceEventFuture, FDv2SourceResult,
12//!     FDv2SynchronizerConfig, Selector, Synchronizer, SynchronizerFactory,
13//! };
14//! use launchdarkly_server_sdk::{ConfigBuilder, DataSystemBuildError, DataSystemBuilder};
15//!
16//! struct MySynchronizer;
17//!
18//! impl Synchronizer for MySynchronizer {
19//!     fn next(&mut self, _selector: Selector) -> FDv2SourceEventFuture<'_> {
20//!         Box::pin(async {
21//!             FDv2SourceEvent {
22//!                 result: FDv2SourceResult::Goodbye,
23//!                 fdv1_fallback: None,
24//!             }
25//!         })
26//!     }
27//!
28//!     fn name(&self) -> &str {
29//!         "my-synchronizer"
30//!     }
31//! }
32//!
33//! struct MyFactory;
34//!
35//! impl SynchronizerFactory for MyFactory {
36//!     fn create(&self) -> Box<dyn Synchronizer> {
37//!         Box::new(MySynchronizer)
38//!     }
39//! }
40//!
41//! #[derive(Clone)]
42//! struct MyConfig;
43//!
44//! impl FDv2SynchronizerConfig for MyConfig {
45//!     fn build_synchronizer(
46//!         &self,
47//!         _context: &DataSourceBuildContext,
48//!     ) -> Result<Box<dyn SynchronizerFactory>, DataSystemBuildError> {
49//!         Ok(Box::new(MyFactory))
50//!     }
51//!
52//!     fn to_owned(&self) -> Box<dyn FDv2SynchronizerConfig> {
53//!         Box::new(self.clone())
54//!     }
55//! }
56//!
57//! let mut data_system = DataSystemBuilder::custom();
58//! data_system.synchronizer(MyConfig);
59//! ConfigBuilder::new("sdk-key").data_system(&data_system);
60//! ```
61
62pub use crate::data_system_builders::{
63    DataSourceBuildContext, FDv2InitializerConfig, FDv2SynchronizerConfig,
64};
65pub use crate::fdv2::data_system::{InitializerFactory, SynchronizerFactory};
66pub use crate::fdv2::model::{ChangeSetKind, Selector};
67pub use crate::fdv2::request_headers::RequestHeaders;
68pub use crate::fdv2::source::{
69    ErrorInfo, ErrorKind, FDv1FallbackDirective, FDv2SourceEvent, FDv2SourceEventFuture,
70    FDv2SourceResult, Initializer, Synchronizer,
71};
72pub use crate::stores::change_set::{ChangeSet, ItemChange};