spawn-cli 0.9.0

A command-line tool for creating files and folders from a template.
use anyhow::Result;
use log::{info, warn};

use crate::config::Config;

pub(crate) fn add(config: &mut Config, name: String, uri: String) -> Result<()> {
    info!("Adding alias {name:?} for {uri:?}");

    config.add_alias(name, uri).write()?;

    Ok(())
}

pub(crate) fn remove(config: &mut Config, name: &str) -> Result<()> {
    info!("Removing alias {name:?}");

    config.remove_alias(name).write()?;

    Ok(())
}

pub(crate) fn list(config: &Config) {
    use comfy_table::Table;
    use comfy_table::modifiers::UTF8_ROUND_CORNERS;
    use comfy_table::presets::UTF8_FULL;

    let aliases = config.get_aliases();
    let mut table = Table::new();

    if aliases.is_empty() {
        warn!("No aliases configured");
    }

    let mut aliases = aliases.iter().collect::<Vec<_>>();

    aliases.sort_by(|a, b| a.0.cmp(b.0));

    table
        .load_preset(UTF8_FULL)
        .apply_modifier(UTF8_ROUND_CORNERS)
        .set_header(vec!["Name", "URI"]);

    for alias in aliases {
        table.add_row(vec![alias.0, alias.1]);
    }

    println!("{table}");
}