statsig_rust/networking/providers/
net_provider_global.rs1use 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}