]> Untitled Git - lemmy.git/blob - crates/api_common/src/context.rs
Making the chat server an actor. (#2793)
[lemmy.git] / crates / api_common / src / context.rs
1 use crate::websocket::chat_server::ChatServer;
2 use actix::Addr;
3 use lemmy_db_schema::{source::secret::Secret, utils::DbPool};
4 use lemmy_utils::{
5   rate_limit::RateLimitCell,
6   settings::{structs::Settings, SETTINGS},
7 };
8 use reqwest_middleware::ClientWithMiddleware;
9 use std::sync::Arc;
10
11 #[derive(Clone)]
12 pub struct LemmyContext {
13   pool: DbPool,
14   chat_server: Addr<ChatServer>,
15   client: Arc<ClientWithMiddleware>,
16   secret: Arc<Secret>,
17   rate_limit_cell: RateLimitCell,
18 }
19
20 impl LemmyContext {
21   pub fn create(
22     pool: DbPool,
23     chat_server: Addr<ChatServer>,
24     client: ClientWithMiddleware,
25     secret: Secret,
26     rate_limit_cell: RateLimitCell,
27   ) -> LemmyContext {
28     LemmyContext {
29       pool,
30       chat_server,
31       client: Arc::new(client),
32       secret: Arc::new(secret),
33       rate_limit_cell,
34     }
35   }
36   pub fn pool(&self) -> &DbPool {
37     &self.pool
38   }
39   pub fn chat_server(&self) -> &Addr<ChatServer> {
40     &self.chat_server
41   }
42   pub fn client(&self) -> &ClientWithMiddleware {
43     &self.client
44   }
45   pub fn settings(&self) -> &'static Settings {
46     &SETTINGS
47   }
48   pub fn secret(&self) -> &Secret {
49     &self.secret
50   }
51   pub fn settings_updated_channel(&self) -> &RateLimitCell {
52     &self.rate_limit_cell
53   }
54 }