use std::sync::Arc;
use atrg_db::DbPool;
use crate::config::Config;
use atrg_identity::IdentityResolver;
#[derive(Clone)]
pub struct AppState {
pub config: Arc<Config>,
pub db: DbPool,
pub http: reqwest::Client,
pub identity: Arc<IdentityResolver>,
}
impl axum::extract::FromRef<AppState> for DbPool {
fn from_ref(state: &AppState) -> Self {
state.db.clone()
}
}
impl axum::extract::FromRef<AppState> for Arc<Config> {
fn from_ref(state: &AppState) -> Self {
state.config.clone()
}
}
impl axum::extract::FromRef<AppState> for Arc<IdentityResolver> {
fn from_ref(state: &AppState) -> Self {
state.identity.clone()
}
}
#[cfg(test)]
mod tests {
use super::*;
fn _assert_send_sync_clone<T: Send + Sync + Clone>() {}
#[test]
fn app_state_is_send_sync_clone() {
_assert_send_sync_clone::<AppState>();
}
}