use crate::builder::BuildExt;
use crate::config::Config;
use crate::extension::WasmLoader;
use crate::registry::ExtensionRegistry;
use sqlx::SqlitePool;
use std::sync::Arc;
use tokio::sync::RwLock;
#[derive(Debug, Clone)]
pub struct SiteOverride {
pub name: String,
pub base_url: String,
}
#[derive(Clone)]
pub struct AppState {
pub db: SqlitePool,
pub config: Arc<Config>,
pub admin_token: Option<Arc<str>>,
pub registry: Arc<ExtensionRegistry>,
pub wasm_loader: Option<Arc<dyn WasmLoader>>,
pub site_override: Arc<RwLock<Option<SiteOverride>>>,
pub builders: Arc<Vec<Box<dyn BuildExt>>>,
}
impl AppState {
pub async fn effective_site_name(&self) -> String {
self.site_override
.read()
.await
.as_ref()
.map(|s| s.name.clone())
.unwrap_or_else(|| self.config.site.name.clone())
}
pub async fn effective_base_url(&self) -> String {
self.site_override
.read()
.await
.as_ref()
.map(|s| s.base_url.clone())
.unwrap_or_else(|| self.config.site.base_url.clone())
}
}