use std::sync::Arc; use crate::forest_client::GrpcForestClient; use crate::templates::TemplateEngine; use forage_core::auth::ForestAuth; use forage_core::platform::ForestPlatform; use forage_core::session::SessionStore; #[derive(Clone)] pub struct AppState { pub templates: TemplateEngine, pub forest_client: Arc, pub platform_client: Arc, pub sessions: Arc, pub grpc_client: Option>, } impl AppState { pub fn new( templates: TemplateEngine, forest_client: Arc, platform_client: Arc, sessions: Arc, ) -> Self { Self { templates, forest_client, platform_client, sessions, grpc_client: None, } } pub fn with_grpc_client(mut self, client: Arc) -> Self { self.grpc_client = Some(client); self } }