Skip to content
use std::fs;

pub struct SpruceConfig {
    pub namespace: String,
    pub project_name: String,
    pub version: String,
}

pub fn read_spruce_config() -> Result<SpruceConfig, Box<dyn std::error::Error>> {
    let cargo_content = fs::read_to_string("Cargo.toml")?;
    let cargo_toml: toml::Value = cargo_content.parse()?;

    let spruce = cargo_toml
        .get("spruce")
        .ok_or("No [spruce] section found in Cargo.toml. Please run 'spruce init' first.")?;

    let namespace = spruce
        .get("namespace")
        .and_then(|n| n.as_str())
        .ok_or("No namespace found in [spruce] section. Please run 'spruce init' first.")?
        .to_string();

    let project_name = cargo_toml["package"]["name"]
        .as_str()
        .ok_or("Could not find package name in Cargo.toml")?
        .to_string();

    let version = cargo_toml["package"]["version"]
        .as_str()
        .ok_or("Could not find version in Cargo.toml")?
        .to_string();

    Ok(SpruceConfig {
        namespace,
        project_name,
        version,
    })
}