holochain_scaffolding_cli 0.1.5

CLI to easily generate and modify holochain apps
Documentation
use degit::{degit, validate_src};
use temp_dir::TempDir;

use crate::{
    error::{ScaffoldError, ScaffoldResult},
    file_tree::{dir_content, load_directory_into_memory, FileTree},
};

use super::{choose_or_get_template, templates_path};

pub fn get_template(
    template_url: &String,
    template: &Option<String>,
) -> ScaffoldResult<(String, FileTree)> {
    validate_src(template_url.clone()).map_err(|s| ScaffoldError::DegitError(s))?;

    let tempdir = TempDir::new().unwrap();

    let tempdir_path = tempdir.path().to_path_buf();
    degit(template_url.as_str(), tempdir_path.to_str().unwrap());

    let file_tree = load_directory_into_memory(&tempdir_path)?;

    let template_name = choose_or_get_template(&file_tree, template).map_err(|e| match e {
        ScaffoldError::NoTemplatesFound => ScaffoldError::NoTemplatesFoundInGitRepo,
        _ => e,
    })?;
    Ok((
        template_name.clone(),
        FileTree::Directory(dir_content(
            &file_tree,
            &templates_path().join(template_name),
        )?),
    ))
}