summaryrefslogtreecommitdiff
path: root/src/codegen.rs
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2021-08-07 15:37:51 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2021-09-07 17:32:16 +0100
commitb443c533f9e5a0bdbf8b380a8d7d59e46c28858b (patch)
treefe01f78e107ca092a3d13875ddff704c6ec2afce /src/codegen.rs
parent1afd692bacf6c95d5897d4af74f6f2d4f8b91c1f (diff)
downloadsubplot-b443c533f9e5a0bdbf8b380a8d7d59e46c28858b.tar.gz
chore: Unwind global template name
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/codegen.rs')
-rw-r--r--src/codegen.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/codegen.rs b/src/codegen.rs
index d27a4d8..f48f049 100644
--- a/src/codegen.rs
+++ b/src/codegen.rs
@@ -27,14 +27,17 @@ pub fn generate_test_program(
doc: &mut Document,
spec: &TemplateSpec,
filename: &Path,
+ template: &str,
) -> Result<(), SubplotError> {
- let context = context(doc)?;
- let code = tera(spec)?.render("template", &context).expect("render");
+ let context = context(doc, template)?;
+ let code = tera(spec, template)?
+ .render("template", &context)
+ .expect("render");
write(filename, &code)?;
Ok(())
}
-fn context(doc: &mut Document) -> Result<Context, SubplotError> {
+fn context(doc: &mut Document, template: &str) -> Result<Context, SubplotError> {
let mut context = Context::new();
context.insert("scenarios", &doc.matched_scenarios()?);
context.insert("files", doc.files());
@@ -42,7 +45,7 @@ fn context(doc: &mut Document) -> Result<Context, SubplotError> {
let funcs_filenames = doc.meta().functions_filenames();
let mut funcs = vec![];
for filename in funcs_filenames {
- let content = resource::read_as_string(filename)
+ let content = resource::read_as_string(filename, Some(template))
.map_err(|err| SubplotError::FunctionsFileNotFound(filename.into(), err))?;
funcs.push(Func::new(filename, content));
}
@@ -51,7 +54,7 @@ fn context(doc: &mut Document) -> Result<Context, SubplotError> {
Ok(context)
}
-fn tera(tmplspec: &TemplateSpec) -> Result<Tera, SubplotError> {
+fn tera(tmplspec: &TemplateSpec, templatename: &str) -> Result<Tera, SubplotError> {
// Tera insists on a glob, but we want to load a specific template
// only, so we use a glob that doesn't match anything.
let mut tera = Tera::new("/..IGNORE-THIS../..SUBPLOT-TERA-NOT-EXIST../*").expect("new");
@@ -61,12 +64,12 @@ fn tera(tmplspec: &TemplateSpec) -> Result<Tera, SubplotError> {
let dirname = tmplspec.template_filename().parent().unwrap();
for helper in tmplspec.helpers() {
let helper_path = dirname.join(helper);
- let helper_content = resource::read_as_string(helper_path)?;
+ let helper_content = resource::read_as_string(helper_path, Some(templatename))?;
let helper_name = helper.display().to_string();
tera.add_raw_template(&helper_name, &helper_content)
.map_err(|err| SubplotError::TemplateError(helper_name.to_string(), err))?;
}
- let template = resource::read_as_string(tmplspec.template_filename())?;
+ let template = resource::read_as_string(tmplspec.template_filename(), Some(templatename))?;
tera.add_raw_template("template", &template)
.map_err(|err| {
SubplotError::TemplateError(tmplspec.template_filename().display().to_string(), err)