diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-10-19 19:30:37 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-11-19 20:18:50 +0000 |
commit | 5a92266170ae9879b0651e6074e538a4de0a214c (patch) | |
tree | d5ecb647701534d6374f441f2c790bfdd2dca848 /src/codegen.rs | |
parent | 572d3097770cd8e5cd22d7767c1d18e0d50b9a90 (diff) | |
download | subplot-5a92266170ae9879b0651e6074e538a4de0a214c.tar.gz |
various: Rework document to support multiple implementations
In order to eventually shift the document metadata to support
more than one template defined for the document this reworks
all the internal APIs to expect templates, and also the external
CLI to be able to provide it.
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/codegen.rs')
-rw-r--r-- | src/codegen.rs | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/src/codegen.rs b/src/codegen.rs index b67d94a..b940b4d 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -9,28 +9,19 @@ use base64::encode; use serde::Serialize; use tera::{Context, Tera, Value}; -/// Return the requested template specification. -pub fn template_spec(doc: &Document) -> Result<TemplateSpec, SubplotError> { - let template = doc - .meta() - .template_name() - .ok_or(SubplotError::MissingTemplate)?; - - let mut filename = PathBuf::from(template); - filename.push("template"); - filename.push("template.yaml"); - TemplateSpec::from_file(&filename) -} - /// Generate a test program from a document, using a template spec. pub fn generate_test_program( doc: &mut Document, - spec: &TemplateSpec, filename: &Path, template: &str, ) -> Result<(), SubplotError> { let context = context(doc, template)?; - let code = tera(spec, template)? + let docimpl = doc + .meta() + .document_impl(template) + .ok_or(SubplotError::MissingTemplate)?; + + let code = tera(docimpl.spec(), template)? .render("template", &context) .expect("render"); write(filename, &code)?; @@ -43,12 +34,13 @@ fn context(doc: &mut Document, template: &str) -> Result<Context, SubplotError> context.insert("scenarios", &scenarios); context.insert("files", doc.files()); - let funcs_filenames = doc.meta().functions_filenames(); let mut funcs = vec![]; - for filename in funcs_filenames { - let content = resource::read_as_string(filename, Some(template)) - .map_err(|err| SubplotError::FunctionsFileNotFound(filename.into(), err))?; - funcs.push(Func::new(filename, content)); + if let Some(docimpl) = doc.meta().document_impl(template) { + for filename in docimpl.functions_filenames() { + let content = resource::read_as_string(filename, Some(template)) + .map_err(|err| SubplotError::FunctionsFileNotFound(filename.into(), err))?; + funcs.push(Func::new(filename, content)); + } } context.insert("functions", &funcs); |