use std::path::{Path, PathBuf};
use everruns_core::typed_id::PrincipalId;
#[derive(Debug, Clone)]
pub struct LocalProfile {
pub data_dir: PathBuf,
pub workspace_root: PathBuf,
pub base_url: String,
pub org_public_id: String,
pub owner_principal_id: PrincipalId,
}
impl Default for LocalProfile {
fn default() -> Self {
let data_dir = std::env::temp_dir().join("everruns-local");
Self {
workspace_root: data_dir.join("workspace"),
data_dir,
base_url: "http://localhost:9300".to_string(),
org_public_id: everruns_core::DEFAULT_ORG_PUBLIC_ID.to_string(),
owner_principal_id: PrincipalId::from_seed(1),
}
}
}
impl LocalProfile {
pub fn new(data_dir: impl Into<PathBuf>) -> Self {
let data_dir = data_dir.into();
Self {
workspace_root: data_dir.join("workspace"),
data_dir,
..Self::default()
}
}
pub fn db_path(&self) -> PathBuf {
self.data_dir.join("local.db")
}
pub fn with_workspace_root(mut self, root: impl Into<PathBuf>) -> Self {
self.workspace_root = root.into();
self
}
pub fn with_base_url(mut self, base_url: impl Into<String>) -> Self {
self.base_url = base_url.into();
self
}
pub fn with_org_public_id(mut self, org_public_id: impl Into<String>) -> Self {
self.org_public_id = org_public_id.into();
self
}
pub fn with_owner_principal_id(mut self, owner_principal_id: PrincipalId) -> Self {
self.owner_principal_id = owner_principal_id;
self
}
pub fn ensure_dirs(&self) -> std::io::Result<()> {
std::fs::create_dir_all(&self.data_dir)?;
std::fs::create_dir_all(&self.workspace_root)?;
Ok(())
}
pub fn data_dir(&self) -> &Path {
&self.data_dir
}
}