vantus 0.3.0

Macro-first async Rust backend framework with explicit composition, typed extraction, and hardened HTTP defaults.
Documentation
use std::sync::Arc;

use crate::config::{AppConfig, Configuration};
use crate::id::IdGenerator;
use crate::logging::LogSink;
use crate::runtime::RuntimeState;

#[derive(Clone)]
pub(crate) struct HostState {
    configuration: Arc<Configuration>,
    app_config: Arc<AppConfig>,
    runtime_state: Arc<RuntimeState>,
    log_sink: Arc<dyn LogSink>,
    id_generator: Arc<dyn IdGenerator>,
}

impl HostState {
    pub(crate) fn new(
        configuration: Arc<Configuration>,
        app_config: Arc<AppConfig>,
        runtime_state: Arc<RuntimeState>,
        log_sink: Arc<dyn LogSink>,
        id_generator: Arc<dyn IdGenerator>,
    ) -> Self {
        Self {
            configuration,
            app_config,
            runtime_state,
            log_sink,
            id_generator,
        }
    }

    pub(crate) fn configuration(&self) -> &Configuration {
        self.configuration.as_ref()
    }

    pub(crate) fn app_config(&self) -> &AppConfig {
        self.app_config.as_ref()
    }

    pub(crate) fn runtime_state(&self) -> Arc<RuntimeState> {
        Arc::clone(&self.runtime_state)
    }

    pub(crate) fn log_sink(&self) -> Arc<dyn LogSink> {
        Arc::clone(&self.log_sink)
    }

    pub(crate) fn id_generator(&self) -> Arc<dyn IdGenerator> {
        Arc::clone(&self.id_generator)
    }
}