Files
osiris/src/config/mod.rs
Timur Gordon 097360ad12 first commit
2025-10-20 22:24:25 +02:00

61 lines
1.7 KiB
Rust

pub mod model;
pub use model::{Config, HeroDbConfig, NamespaceConfig};
use crate::error::{Error, Result};
use std::collections::HashMap;
use std::fs;
use std::path::PathBuf;
/// Load configuration from file
pub fn load_config(path: Option<PathBuf>) -> Result<Config> {
let config_path = path.unwrap_or_else(default_config_path);
if !config_path.exists() {
return Err(Error::Config(format!(
"Configuration file not found: {}",
config_path.display()
)));
}
let content = fs::read_to_string(&config_path)?;
let config: Config = toml::from_str(&content)
.map_err(|e| Error::Config(format!("Failed to parse config: {}", e)))?;
Ok(config)
}
/// Save configuration to file
pub fn save_config(config: &Config, path: Option<PathBuf>) -> Result<()> {
let config_path = path.unwrap_or_else(default_config_path);
// Create parent directory if it doesn't exist
if let Some(parent) = config_path.parent() {
fs::create_dir_all(parent)?;
}
let content = toml::to_string_pretty(config)
.map_err(|e| Error::Config(format!("Failed to serialize config: {}", e)))?;
fs::write(&config_path, content)?;
Ok(())
}
/// Get the default configuration file path
pub fn default_config_path() -> PathBuf {
let home = std::env::var("HOME").unwrap_or_else(|_| ".".to_string());
PathBuf::from(home)
.join(".config")
.join("osiris")
.join("config.toml")
}
/// Create a default configuration
pub fn create_default_config(herodb_url: String) -> Config {
Config {
herodb: HeroDbConfig { url: herodb_url },
namespaces: HashMap::new(),
}
}