statsig_rust/id_lists_adapter/
id_lists_adapter_trait.rs

1use crate::{StatsigErr, StatsigRuntime};
2use async_trait::async_trait;
3use std::sync::Arc;
4use std::time::Duration;
5use std::{collections::HashMap, fmt};
6
7use serde::{Deserialize, Serialize};
8
9#[derive(Serialize, Deserialize, Debug, Clone)]
10#[serde(rename_all = "camelCase")]
11pub struct IdListMetadata {
12    pub name: String,
13    pub url: String,
14
15    #[serde(rename = "fileID")]
16    pub file_id: Option<String>,
17
18    pub size: u64,
19    pub creation_time: i64,
20}
21
22pub struct IdListUpdate {
23    pub raw_changeset: Option<String>,
24    pub new_metadata: IdListMetadata,
25}
26
27#[async_trait]
28pub trait IdListsAdapter: Send + Sync {
29    async fn start(
30        self: Arc<Self>,
31        statsig_runtime: &Arc<StatsigRuntime>,
32        listener: Arc<dyn IdListsUpdateListener + Send + Sync>,
33    ) -> Result<(), StatsigErr>;
34
35    async fn shutdown(&self, timeout: Duration) -> Result<(), StatsigErr>;
36
37    async fn schedule_background_sync(
38        self: Arc<Self>,
39        statsig_runtime: &Arc<StatsigRuntime>,
40    ) -> Result<(), StatsigErr>;
41
42    fn get_type_name(&self) -> String;
43}
44
45pub trait IdListsUpdateListener: Send + Sync {
46    fn get_current_id_list_metadata(&self) -> HashMap<String, IdListMetadata>;
47
48    fn did_receive_id_list_updates(&self, updates: HashMap<String, IdListUpdate>);
49}
50
51impl fmt::Debug for dyn IdListsAdapter {
52    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53        write!(f, "{}", self.get_type_name())
54    }
55}