holochain_scaffolding_cli 0.4000.4

CLI to easily generate and modify holochain apps
Documentation
use convert_case::{Case, Casing};
use handlebars::{
    handlebars_helper, Context, Handlebars, Helper, HelperResult, Output, RenderContext,
};
use package_manager_command::register_package_manager_command;
use serde_json::Value;

pub mod filter;
pub mod merge;
pub mod package_manager_command;
pub mod uniq_lines;

use filter::register_filter;
use merge::register_merge;
use uniq_lines::register_uniq_lines;

pub fn register_helpers(h: Handlebars) -> Handlebars {
    let h = register_concat_helper(h);
    let h = register_contains_helper(h);
    let h = register_includes_helper(h);
    let h = register_case_helpers(h);
    let h = register_replace_helper(h);
    let h = register_pluralize_helpers(h);
    let h = register_merge(h);
    let h = register_uniq_lines(h);
    let h = register_filter(h);
    let h = register_package_manager_command(h);

    h
}

pub fn register_concat_helper(mut h: Handlebars) -> Handlebars {
    h.register_helper(
        "concat",
        Box::new(
            |h: &Helper,
             _r: &Handlebars,
             _: &Context,
             _rc: &mut RenderContext,
             out: &mut dyn Output|
             -> HelperResult {
                let result = h
                    .params()
                    .iter()
                    .map(|p| p.render())
                    .collect::<Vec<String>>()
                    .join("");

                out.write(result.as_ref())?;
                Ok(())
            },
        ),
    );

    h
}

pub fn register_contains_helper(mut h: Handlebars) -> Handlebars {
    handlebars_helper!(contains: |list: Option<Vec<Value>>, value: Value| list.is_some() && list.unwrap().contains(&value));
    h.register_helper("contains", Box::new(contains));

    h
}

pub fn register_includes_helper(mut h: Handlebars) -> Handlebars {
    handlebars_helper!(includes: |string: String, substring: String| string.contains(&substring));
    h.register_helper("includes", Box::new(includes));

    h
}

pub fn register_replace_helper(mut h: Handlebars) -> Handlebars {
    handlebars_helper!(replace: |s: String, pattern: String, replaced_by: String| s.replace(&pattern, replaced_by.as_str()));
    h.register_helper("replace", Box::new(replace));

    h
}

pub fn register_pluralize_helpers(mut h: Handlebars) -> Handlebars {
    handlebars_helper!(singular: |s: String| pluralizer::pluralize(s.as_str(), 1, false));
    h.register_helper("singular", Box::new(singular));
    handlebars_helper!(plural: |s: String| pluralizer::pluralize(s.as_str(), 2, false));
    h.register_helper("plural", Box::new(plural));

    h
}

pub fn register_case_helpers(mut h: Handlebars) -> Handlebars {
    handlebars_helper!(title_case: |s: String| s.to_case(Case::Title));
    h.register_helper("title_case", Box::new(title_case));

    handlebars_helper!(lower_case: |s: String| s.to_case(Case::Lower));
    h.register_helper("lower_case", Box::new(lower_case));

    handlebars_helper!(snake_case: |s: String| s.to_case(Case::Snake));
    h.register_helper("snake_case", Box::new(snake_case));

    handlebars_helper!(kebab_case: |s: String| s.to_case(Case::Kebab));
    h.register_helper("kebab_case", Box::new(kebab_case));

    handlebars_helper!(camel_case: |s: String| s.to_case(Case::Camel));
    h.register_helper("camel_case", Box::new(camel_case));

    handlebars_helper!(pascal_case: |s: String| s.to_case(Case::Pascal));
    h.register_helper("pascal_case", Box::new(pascal_case));

    h
}