Skip to main content

brainos_httpadapter/
state.rs

1//! Shared application state for HTTP handlers.
2
3use std::collections::HashMap;
4use std::sync::Arc;
5
6use axum::extract::State as AxumState;
7use channel::transport::inbound::WebhookInboundTransport;
8use tokio::sync::Mutex;
9use uuid::Uuid;
10
11use crate::metrics::Metrics;
12
13/// Maximum number of cached signal responses before eviction.
14pub const CACHE_CAPACITY: usize = 1000;
15
16/// Shared state for all HTTP handlers.
17pub struct AppState {
18    pub processor: Arc<signal::SignalProcessor>,
19    /// Registry of active webhook transports (transport_id → transport).
20    pub webhook_handlers: HashMap<String, Arc<WebhookInboundTransport>>,
21    /// LRU cache: signal_id → SignalResponse. Bounded to `CACHE_CAPACITY` entries.
22    pub cache: Mutex<lru::LruCache<Uuid, signal::SignalResponse>>,
23    /// Configured API keys (loaded from BrainConfig).
24    pub api_keys: Vec<brain::ApiKeyConfig>,
25    /// Request counters and latency.
26    pub metrics: Arc<Metrics>,
27}
28
29/// Axum extractor alias — use `AppStateRef` in handler signatures.
30pub type AppStateRef = AxumState<Arc<AppState>>;