1use crate::capture::CaptureEvent;
2use crate::provider::ProviderKind;
3use crate::session::SessionId;
4use crate::store::Store;
5use std::sync::Arc;
6use tokio::sync::broadcast;
7use url::Url;
8
9#[derive(Clone)]
10pub struct AppState {
11 pub store: Arc<dyn Store>,
12 pub events: broadcast::Sender<CaptureEvent>,
13 pub provider: ProviderKind,
14 pub upstream: Url,
15 pub session_id: SessionId,
16 pub started_at: chrono::DateTime<chrono::Utc>,
17 pub redact: bool,
18}
19
20impl AppState {
21 pub fn new(
22 store: Arc<dyn Store>,
23 provider: ProviderKind,
24 upstream: Url,
25 session_id: SessionId,
26 redact: bool,
27 ) -> Self {
28 let (tx, _) = broadcast::channel(1024);
29 Self {
30 store,
31 events: tx,
32 provider,
33 upstream,
34 session_id,
35 started_at: chrono::Utc::now(),
36 redact,
37 }
38 }
39}