launchdarkly_server_sdk/
lib.rs

1//! launchdarkly-server-sdk is the main crate for the LaunchDarkly SDK.
2//!
3//! This package contains the types and methods for the SDK client [Client] and its overall
4//! configuration.
5//!
6//! For more information and code examples, see the Rust SDK Reference:
7//! <https://docs.launchdarkly.com/sdk/server-side/rust>
8
9#![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
19pub use launchdarkly_server_sdk_evaluation::Error as EvalError;
20pub use launchdarkly_server_sdk_evaluation::{
21    AttributeValue, Context, ContextBuilder, Detail, FlagValue, Kind, MultiContextBuilder, Reason,
22    Reference,
23};
24use lazy_static::lazy_static;
25
26pub use client::Client;
27
28// Re-export
29pub use client::{BuildError, StartError};
30pub use config::{ApplicationInfo, BuildError as ConfigBuildError, Config, ConfigBuilder};
31pub use data_source_builders::{
32    BuildError as DataSourceBuildError, PollingDataSourceBuilder, StreamingDataSourceBuilder,
33};
34pub use evaluation::{FlagDetail, FlagDetailConfig};
35pub use events::event::MigrationOpEvent;
36pub use events::processor::EventProcessor;
37pub use events::processor_builders::{
38    BuildError as EventProcessorBuildError, EventProcessorBuilder, NullEventProcessorBuilder,
39};
40pub use feature_requester_builders::{
41    BuildError as FeatureRequestBuilderError, FeatureRequesterFactory,
42};
43pub use launchdarkly_server_sdk_evaluation::{Flag, Segment, Versioned};
44pub use migrations::{
45    ExecutionOrder, MigrationOpTracker, Migrator, MigratorBuilder, Operation, Origin, Stage,
46};
47pub use service_endpoints::ServiceEndpointsBuilder;
48pub use stores::persistent_store::{PersistentDataStore, PersistentStoreError};
49pub use stores::persistent_store_builders::{
50    PersistentDataStoreBuilder, PersistentDataStoreFactory,
51};
52pub use stores::store_types::{AllData, DataKind, SerializedItem, StorageItem};
53pub use version::version_string;
54
55mod client;
56mod config;
57mod data_source;
58mod data_source_builders;
59mod evaluation;
60mod events;
61mod feature_requester;
62mod feature_requester_builders;
63mod migrations;
64mod reqwest;
65mod sampler;
66mod service_endpoints;
67mod stores;
68mod test_common;
69mod version;
70
71static LAUNCHDARKLY_EVENT_SCHEMA_HEADER: &str = "x-launchdarkly-event-schema";
72static LAUNCHDARKLY_PAYLOAD_ID_HEADER: &str = "x-launchdarkly-payload-id";
73static LAUNCHDARKLY_TAGS_HEADER: &str = "x-launchdarkly-tags";
74static CURRENT_EVENT_SCHEMA: &str = "4";
75
76lazy_static! {
77    pub(crate) static ref USER_AGENT: String =
78        format!("RustServerClient/{}", version_string());
79
80    // For cases where a statically empty header value are needed.
81    pub(crate) static ref EMPTY_HEADER: hyper::header::HeaderValue =
82        hyper::header::HeaderValue::from_static("");
83}
84
85#[cfg(test)]
86mod tests {
87    use test_case::test_case;
88
89    #[test_case("130.65331632653061", 130.65331632653061)]
90    #[test_case("130.65331632653062", 130.65331632653061)]
91    #[test_case("130.65331632653063", 130.65331632653064)]
92    fn json_float_serialization_matches_go(float_as_string: &str, expected: f64) {
93        let parsed: f64 = serde_json::from_str(float_as_string).unwrap();
94        assert_eq!(expected, parsed);
95    }
96}