use std::sync::Arc; use cache::redis::RedisCache; use db::conn::Db; use jwt::{HasJwtState, JwtState}; use crate::config::{SharedSpaceConfig, SpaceConfig}; pub mod authz; pub mod bans; pub mod channels; pub mod invites; pub mod members; pub mod overwrites; pub mod roles; pub mod spaces; #[derive(Clone)] pub struct SpaceService { pub db: Db, pub kv: Arc, pub config: SharedSpaceConfig, pub jwt: JwtState, } impl SpaceService { pub fn new(db: Db, kv: Arc, jwt: JwtState) -> Self { Self { db, kv, config: Arc::new(SpaceConfig::default()), jwt, } } pub fn with_config(mut self, config: SharedSpaceConfig) -> Self { self.config = config; self } } impl HasJwtState for SpaceService { fn jwt_state(&self) -> &JwtState { &self.jwt } fn access_blacklist(&self) -> Option> { Some(Arc::new(rate_limit::AccessTokenBlacklist::new( self.kv.clone(), ))) } } impl rate_limit::RateLimitProvider for SpaceService { fn rate_limit_kv(&self) -> Arc { self.kv.clone() } fn rate_limit_settings(&self) -> Arc { Arc::new(rate_limit::RateLimitConfig::default()) } }