launchdarkly_server_sdk/
lib.rs1#![deny(rustdoc::missing_crate_level_docs)]
10#![deny(missing_docs)]
11
12#[macro_use]
13extern crate log;
14
15#[cfg(test)]
16#[macro_use]
17extern crate serde_json;
18
19use http::HeaderValue;
20pub use launchdarkly_server_sdk_evaluation::Error as EvalError;
21pub use launchdarkly_server_sdk_evaluation::{
22 AttributeValue, Context, ContextBuilder, Detail, FlagValue, Kind, MultiContextBuilder, Reason,
23 Reference,
24};
25use std::sync::LazyLock;
26
27pub use client::Client;
28
29pub use client::{BuildError, StartError};
31pub use config::{ApplicationInfo, BuildError as ConfigBuildError, Config, ConfigBuilder};
32pub use data_source_builders::{
33 BuildError as DataSourceBuildError, PollingDataSourceBuilder, StreamingDataSourceBuilder,
34};
35pub use evaluation::{FlagDetail, FlagDetailConfig, FlagFilter};
36pub use events::event::MigrationOpEvent;
37pub use events::processor::EventProcessor;
38pub use events::processor_builders::{
39 BuildError as EventProcessorBuildError, EventProcessorBuilder, NullEventProcessorBuilder,
40};
41pub use feature_requester_builders::{
42 BuildError as FeatureRequestBuilderError, FeatureRequesterFactory,
43};
44pub use launchdarkly_server_sdk_evaluation::{Flag, FlagBuilder, RuleBuilder, Segment, Versioned};
45pub use migrations::{
46 ExecutionOrder, MigrationOpTracker, Migrator, MigratorBuilder, Operation, Origin, Stage,
47};
48pub use service_endpoints::ServiceEndpointsBuilder;
49pub use stores::persistent_store::{PersistentDataStore, PersistentStoreError};
50pub use stores::persistent_store_builders::{
51 PersistentDataStoreBuilder, PersistentDataStoreFactory,
52};
53pub use stores::store_types::{AllData, DataKind, SerializedItem, StorageItem};
54pub use test_data::TestData;
55pub use version::version_string;
56
57mod client;
58mod config;
59mod data_source;
60mod data_source_builders;
61mod evaluation;
62mod events;
63mod feature_requester;
64mod feature_requester_builders;
65mod migrations;
66mod reqwest;
67mod sampler;
68mod service_endpoints;
69mod stores;
70mod test_common;
71mod test_data;
72mod version;
73
74static LAUNCHDARKLY_EVENT_SCHEMA_HEADER: &str = "x-launchdarkly-event-schema";
75static LAUNCHDARKLY_PAYLOAD_ID_HEADER: &str = "x-launchdarkly-payload-id";
76static LAUNCHDARKLY_TAGS_HEADER: &str = "x-launchdarkly-tags";
77static CURRENT_EVENT_SCHEMA: &str = "4";
78
79static USER_AGENT: LazyLock<String> =
80 LazyLock::new(|| format!("RustServerClient/{}", version_string()));
81
82static EMPTY_HEADER: LazyLock<HeaderValue> = LazyLock::new(|| HeaderValue::from_static(""));
83
84#[cfg(test)]
85mod tests {
86 use test_case::test_case;
87
88 #[test_case("130.65331632653061", 130.65331632653061)]
89 #[test_case("130.65331632653062", 130.65331632653061)]
90 #[test_case("130.65331632653063", 130.65331632653064)]
91 fn json_float_serialization_matches_go(float_as_string: &str, expected: f64) {
92 let parsed: f64 = serde_json::from_str(float_as_string).unwrap();
93 assert_eq!(expected, parsed);
94 }
95}