statsig_rust/networking/providers/
net_provider_global.rs

1use std::sync::{Arc, Mutex, Weak};
2
3use crate::{log_e, networking::NetworkProvider};
4
5lazy_static::lazy_static! {
6    static ref INSTANCE: Mutex<Option<Weak<dyn NetworkProvider>>> = Mutex::new(None);
7}
8
9const TAG: &str = stringify!(NetworkProviderGlobal);
10
11pub struct NetworkProviderGlobal;
12
13impl NetworkProviderGlobal {
14    pub fn try_get() -> Option<Weak<dyn NetworkProvider>> {
15        let lock = match INSTANCE.lock() {
16            Ok(lock) => lock,
17            Err(e) => {
18                log_e!(TAG, "Failed to get network provider: {}", e);
19                return None;
20            }
21        };
22
23        match lock.as_ref() {
24            Some(weak) => Some(weak.clone()),
25            None => None,
26        }
27    }
28
29    pub fn set(provider: &Arc<dyn NetworkProvider>) {
30        match INSTANCE.lock() {
31            Ok(mut instance) => {
32                *instance = Some(Arc::downgrade(provider));
33            }
34            Err(e) => {
35                log_e!(TAG, "Failed to set network provider: {}", e);
36            }
37        }
38    }
39}