Skip to main content

statsig_rust/specs_adapter/
mod.rs

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