auric 0.1.6

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

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

pub async fn run(name: String) -> anyhow::Result<()> {
    // Generate template
    let templates_dir = PathBuf::new().join("src").join("templates");
    let mut template_dir = templates_dir.clone();
    let segments: Vec<_> = name.split('.').collect();
    let short = segments.last().cloned().unwrap_or_default();
    for segment in segments.into_iter().rev().skip(1).rev() {
        template_dir = template_dir.join(segment);
    }
    let root_dir = Path::new(".");
    fs::create_dir_all(root_dir.join(&template_dir))?;
    let relative_path = template_dir.join(format!("{short}.hbs"));
    let path = root_dir.join(&relative_path);
    let mut file = File::create(&path)?;
    file.write_all("{{outlet}}\n".as_bytes())?;
    eprintln!("created {}", relative_path.display());

    Ok(())
}