pnwkit_core/
config.rs

1#[cfg(feature = "async")]
2use std::{future::Future, pin::Pin};
3
4use std::sync::{Arc, Mutex};
5
6#[cfg(any(feature = "async", feature = "sync"))]
7use std::time::Duration;
8
9#[cfg(feature = "subscriptions")]
10use crate::socket::Socket;
11use crate::{
12    rate_limiter::RateLimiter,
13    request::{Client, Headers},
14};
15
16#[derive(Debug)]
17pub struct Config {
18    pub api_key: String,
19    pub verified_bot_key: Option<String>,
20    pub verified_bot_key_api_key: Option<String>,
21    pub api_url: String,
22    #[cfg(feature = "subscriptions")]
23    pub socket_url: String,
24    #[cfg(feature = "subscriptions")]
25    pub subscribe_url: String,
26    #[cfg(feature = "subscriptions")]
27    pub subscription_auth_url: String,
28    pub rate_limiter: Arc<Mutex<RateLimiter>>,
29    #[cfg(feature = "subscriptions")]
30    pub socket: Box<dyn Socket>,
31    pub client: Box<dyn Client>,
32    pub headers: Headers,
33    pub now: fn() -> u64,
34    #[cfg(feature = "async")]
35    pub sleep: fn(Duration) -> Pin<Box<dyn Future<Output = ()> + Send + Sync>>,
36    #[cfg(feature = "sync")]
37    pub sleep_sync: fn(Duration) -> (),
38    pub user_agent: String,
39}
40
41impl Config {
42    pub fn update_headers(mut self) -> Self {
43        self.headers
44            .set_authorization(format!("Bearer {}", self.api_key));
45        if let Some(verified_bot_key) = &self.verified_bot_key {
46            self.headers.set_x_bot_key(verified_bot_key.clone());
47        }
48        if let Some(verified_bot_key_api_key) = &self.verified_bot_key_api_key {
49            self.headers.set_x_api_key(verified_bot_key_api_key.clone());
50        }
51        self.headers.set_user_agent(self.user_agent.clone());
52        self
53    }
54
55    pub fn set_api_key(mut self, api_key: String) -> Self {
56        self.api_key = api_key;
57        self.headers
58            .set_authorization(format!("Bearer {}", self.api_key));
59        self
60    }
61
62    pub fn set_verified_bot_key(mut self, verified_bot_key: String) -> Self {
63        self.headers.set_x_bot_key(verified_bot_key.clone());
64        self.verified_bot_key = Some(verified_bot_key);
65        self
66    }
67
68    pub fn set_verified_bot_key_api_key(mut self, verified_bot_key_api_key: String) -> Self {
69        self.headers.set_x_api_key(verified_bot_key_api_key.clone());
70        self.verified_bot_key_api_key = Some(verified_bot_key_api_key);
71        self
72    }
73
74    pub fn set_api_url(mut self, api_url: String) -> Self {
75        self.api_url = api_url;
76        self
77    }
78
79    #[cfg(feature = "subscriptions")]
80    pub fn set_socket_url(mut self, socket_url: String) -> Self {
81        self.socket_url = socket_url;
82        self
83    }
84
85    #[cfg(feature = "subscriptions")]
86    pub fn set_subscribe_url(mut self, subscriptions_url: String) -> Self {
87        self.subscribe_url = subscriptions_url;
88        self
89    }
90
91    #[cfg(feature = "subscriptions")]
92    pub fn set_subscription_auth_url(mut self, subscription_auth_url: String) -> Self {
93        self.subscription_auth_url = subscription_auth_url;
94        self
95    }
96
97    pub fn set_rate_limiter(mut self, rate_limiter: RateLimiter) -> Self {
98        self.rate_limiter = Arc::new(Mutex::new(rate_limiter));
99        self
100    }
101
102    #[cfg(feature = "subscriptions")]
103    pub fn set_socket(mut self, socket: Box<dyn Socket>) -> Self {
104        self.socket = socket;
105        self
106    }
107
108    pub fn set_client(mut self, client: Box<dyn Client>) -> Self {
109        self.client = client;
110        self
111    }
112
113    pub fn set_now(mut self, now: fn() -> u64) -> Self {
114        self.now = now;
115        self
116    }
117
118    #[cfg(feature = "async")]
119    pub fn set_sleep(
120        mut self,
121        sleep: fn(Duration) -> Pin<Box<dyn Future<Output = ()> + Send + Sync>>,
122    ) -> Self {
123        self.sleep = sleep;
124        self
125    }
126
127    #[cfg(feature = "sync")]
128    pub fn set_sleep_sync(mut self, sleep_sync: fn(Duration) -> ()) -> Self {
129        self.sleep_sync = sleep_sync;
130        self
131    }
132
133    pub fn set_user_agent(mut self, user_agent: String) -> Self {
134        self.user_agent = user_agent;
135        self
136    }
137}