auric 0.1.5

CLI for the Ember-inspired Auric SPA framework
use clap::Parser;
use std::path::PathBuf;
use std::{fs, path::Path};

#[derive(Debug, Parser)]
pub struct Opts {
    /// Template Name
    #[arg(value_name = "name")]
    pub name: String,
}

pub async fn run(name: String) -> anyhow::Result<()> {
    // Delete template
    let root_dir = Path::new(".");
    let (relative_dir, short) = {
        let templates_dir = PathBuf::new().join("src/templates");
        let mut template_dir = templates_dir.clone();
        let segments: Vec<_> = name.split('.').collect();
        for segment in segments.clone().into_iter().rev().skip(1).rev() {
            template_dir = template_dir.join(segment);
        }
        let short = segments.last().cloned().unwrap_or_default();
        (template_dir, short)
    };
    let relative_path = relative_dir.join(format!("{short}.hbs"));
    let path = root_dir.join(&relative_path);
    if path.exists() {
        fs::remove_file(&path)?;
        eprintln!("deleted {}", relative_path.display());
    }

    Ok(())
}