use miette::IntoDiagnostic;
use serde::Deserialize;
#[derive(Deserialize)]
pub struct Config {
pub default_extension: String,
pub export: Export,
}
impl Default for Config {
fn default() -> Self {
Self {
default_extension: "µcad".to_string(),
export: Default::default(),
}
}
}
impl Config {
pub fn load(filename: &std::path::Path) -> miette::Result<Self> {
let content = std::fs::read_to_string(filename).into_diagnostic()?;
let mut config: Config = toml::from_str(&content).into_diagnostic()?;
if !microcad_lang::MICROCAD_EXTENSIONS.contains(&config.default_extension.as_str()) {
let fallback = Config::default().default_extension;
log::warn!(
"`{}` is a valid µcad extension, switching to `{fallback}`.",
&config.default_extension
);
config.default_extension = fallback;
}
Ok(config)
}
}
#[derive(Deserialize)]
pub struct Export {
pub sketch: String,
pub part: String,
}
impl Default for Export {
fn default() -> Self {
Self {
sketch: "svg".into(),
part: "stl".into(),
}
}
}