espforge 0.1.20

A scaffolding++ project generator for ESP32 projects
Documentation
use anyhow::{Context, Result};
use espforge_configuration::EspforgeConfiguration;
use std::fs;
use std::path::Path;
use toml_edit::DocumentMut;

mod core;
mod external;
mod features;
mod versioning;

use core::CoreDependencies;
use external::ExternalDependencies;
use features::FeatureManager;
use versioning::VersionResolver;

pub fn add_dependencies(project_dir: &Path, model: &EspforgeConfiguration) -> Result<()> {
    let cargo_path = project_dir.join("Cargo.toml");
    let manifest = fs::read_to_string(&cargo_path).context("Failed to read Cargo.toml")?;

    let mut doc: DocumentMut = manifest.parse().context("Failed to parse Cargo.toml")?;

    let versions = VersionResolver::new()?;

    CoreDependencies::add(&mut doc, &versions)?;

    FeatureManager::add_platform_features(&mut doc, model)?;

    FeatureManager::add_component_features(&mut doc, model)?;

    FeatureManager::add_device_features(&mut doc, model)?;

    FeatureManager::handle_embassy_features(&mut doc, model)?;

    ExternalDependencies::merge_embedded(&mut doc, model)?;

    ExternalDependencies::merge_external(&mut doc, project_dir)?;

    FeatureManager::handle_psram(&mut doc, model)?;

    fs::write(cargo_path, doc.to_string()).context("Failed to write Cargo.toml")?;

    Ok(())
}