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};