1use crate::auth::JwtAuth;
6use std::sync::Arc;
7use vex_llm::{Metrics, RateLimiter};
8use vex_persist::StorageBackend;
9use vex_queue::{QueueBackend, WorkerPool};
10
11#[derive(Clone)]
13pub struct AppState {
14 jwt_auth: JwtAuth,
15 rate_limiter: Arc<RateLimiter>,
16 metrics: Arc<Metrics>,
17 db: Arc<dyn StorageBackend>,
18 queue: Arc<WorkerPool<dyn QueueBackend>>,
19}
20
21impl AppState {
22 pub fn new(
24 jwt_auth: JwtAuth,
25 rate_limiter: Arc<RateLimiter>,
26 metrics: Arc<Metrics>,
27 db: Arc<dyn StorageBackend>,
28 queue: Arc<WorkerPool<dyn QueueBackend>>,
29 ) -> Self {
30 Self {
31 jwt_auth,
32 rate_limiter,
33 metrics,
34 db,
35 queue,
36 }
37 }
38
39 pub fn jwt_auth(&self) -> &JwtAuth {
41 &self.jwt_auth
42 }
43
44 pub fn rate_limiter(&self) -> Arc<RateLimiter> {
46 self.rate_limiter.clone()
47 }
48
49 pub fn metrics(&self) -> Arc<Metrics> {
51 self.metrics.clone()
52 }
53
54 pub fn db(&self) -> Arc<dyn StorageBackend> {
56 self.db.clone()
57 }
58
59 pub fn queue(&self) -> Arc<WorkerPool<dyn QueueBackend>> {
61 self.queue.clone()
62 }
63}