state.rs 28 lignes · 935 octets
//! Shared state injected into federation handlers via Axum extensions.

use std::sync::Arc;

use crate::config::FediverseConfig;

use super::resolver::LocalUserResolver;

/// Injected into every federation handler via `Extension<FediverseState>`.
/// Carries the runtime configuration and a handle to the user resolver.
///
/// Cheap to clone — the resolver is behind `Arc`, the config is `Clone`.
#[derive(Clone)]
pub struct FediverseState {
    /// Runtime configuration loaded by the federation router builder.
    pub config: FediverseConfig,
    /// User store projection used by handlers.
    pub resolver: Arc<dyn LocalUserResolver>,
}

impl std::fmt::Debug for FediverseState {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("FediverseState")
            .field("config", &self.config)
            .field("resolver", &"<dyn LocalUserResolver>")
            .finish()
    }
}