spawn-cli 0.9.0

A command-line tool for creating files and folders from a template.
use std::collections::HashMap;
use tera::{Tera, Value};

pub(super) fn extend(mut tera: Tera) -> Tera {
    let map_str_with = |map_fn: fn(&str) -> String| {
        move |v: &Value, _: &HashMap<String, Value>| match v.as_str() {
            Some(s) => Ok(Value::String(map_fn(s))),
            None => Err("Expected a string".into()),
        }
    };

    tera.register_filter(
        "camel_case",
        map_str_with(heck::ToLowerCamelCase::to_lower_camel_case),
    );
    tera.register_filter("kebab_case", map_str_with(heck::ToKebabCase::to_kebab_case));
    tera.register_filter(
        "pascal_case",
        map_str_with(heck::ToPascalCase::to_pascal_case),
    );
    tera.register_filter("snake_case", map_str_with(heck::ToSnakeCase::to_snake_case));
    tera.register_filter("title_case", map_str_with(heck::ToTitleCase::to_title_case));
    tera.register_filter("train_case", map_str_with(heck::ToTrainCase::to_train_case));
    tera.register_filter(
        "upper_kebab_case",
        map_str_with(heck::ToShoutyKebabCase::to_shouty_kebab_case),
    );
    tera.register_filter(
        "upper_snake_case",
        map_str_with(heck::ToShoutySnakeCase::to_shouty_snake_case),
    );

    tera
}