statsig_rust/specs_adapter/
mod.rs1use serde::Serialize;
2pub use specs_adapter_trait::*;
3
4pub use statsig_bootstrap_specs_adapter::StatsigBootstrapSpecsAdapter;
5pub use statsig_customized_specs_adapter::StatsigCustomizedSpecsAdapter;
6#[cfg(feature = "with_grpc")]
7pub use statsig_grpc_specs_adapter::StatsigGrpcSpecsAdapter;
8pub use statsig_http_specs_adapter::StatsigHttpSpecsAdapter;
9pub use statsig_local_file_specs_adapter::StatsigLocalFileSpecsAdapter;
10
11use crate::log_w;
12
13mod statsig_bootstrap_specs_adapter;
14mod statsig_customized_specs_adapter;
15mod statsig_data_store_specs_adapter;
16#[cfg(feature = "with_grpc")]
17mod statsig_grpc_specs_adapter;
18mod statsig_http_specs_adapter;
19mod statsig_local_file_specs_adapter;
20
21mod specs_adapter_trait;
22
23pub const DEFAULT_INIT_TIMEOUT_MS: u64 = 3000;
24
25const TAG: &str = "SpecAdapterConfig";
26
27#[derive(Debug, Clone, Serialize)]
28pub struct SpecAdapterConfig {
29 pub adapter_type: SpecsAdapterType,
30 pub init_timeout_ms: u64,
31
32 pub specs_url: Option<String>,
33}
34
35#[derive(Debug, Clone, Serialize)]
36pub enum SpecsAdapterType {
37 NetworkGrpcWebsocket,
38 NetworkHttp,
39 DataStore,
40}
41
42impl From<String> for SpecsAdapterType {
43 fn from(val: String) -> Self {
44 match val.to_lowercase().as_str() {
45 "network_grpc_websocket" => SpecsAdapterType::NetworkGrpcWebsocket,
46 "network_http" => SpecsAdapterType::NetworkHttp,
47 "data_store" => SpecsAdapterType::DataStore,
48 _ => {
49 log_w!(
50 TAG,
51 "Invalid specs adapter type: {}. Defaulting to NetworkHttp",
52 val
53 );
54 SpecsAdapterType::NetworkHttp
55 }
56 }
57 }
58}