diff --git a/src/cli_v1.rs b/src/cli_v1.rs index 3d45321..b594232 100644 --- a/src/cli_v1.rs +++ b/src/cli_v1.rs @@ -59,6 +59,10 @@ enum Command { #[arg(short, long)] output_dir: Option, + /// Optional JSON object available in templates as `context`. + #[arg(long)] + context: Option, + /// Disable automatic postprocessing of the output (formatting and automatic style fixes). #[arg(long)] no_postprocess: bool, @@ -136,12 +140,18 @@ pub fn run_cli_v1_main() -> anyhow::Result<()> { Command::Generate { template, output_dir, + context, no_postprocess, .. } => { + let context: Option = context + .map(|s| serde_json::from_str(&s).context("invalid 'context' argument")) + .transpose()?; + let generated_paths = match &output_dir { Some(path) => { - let generated_paths = generate(&api, template.into(), path, no_postprocess)?; + let generated_paths = + generate(&api, template.into(), path, context, no_postprocess)?; println!("done! output written to {path}"); generated_paths } @@ -167,7 +177,8 @@ pub fn run_cli_v1_main() -> anyhow::Result<()> { .try_into() .context("non-UTF8 tempdir path")?; - let generated_paths = generate(&api, template.into(), path, no_postprocess)?; + let generated_paths = + generate(&api, template.into(), path, context, no_postprocess)?; println!("done! output written to {path}"); // Persist the TempDir if everything was successful diff --git a/src/generator.rs b/src/generator.rs index f7162a4..4431d2d 100644 --- a/src/generator.rs +++ b/src/generator.rs @@ -27,6 +27,7 @@ pub fn generate( api: &Api, tpl_name: String, output_dir: &Utf8Path, + context: Option, no_postprocess: bool, ) -> anyhow::Result> { let (name_without_jinja_suffix, tpl_path) = match tpl_name.strip_suffix(".jinja") { @@ -58,6 +59,7 @@ pub fn generate( .parent() .with_context(|| format!("invalid template path `{tpl_path}`"))?, )?; + minijinja_env.add_global("context", context); minijinja_env.add_template(tpl_path, &tpl_source)?; let tpl = minijinja_env.get_template(tpl_path)?;