diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-01-10 11:57:30 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-01-10 11:57:30 +0000 |
commit | 3441b89c83fd2ff94c904ef96230508ad620532e (patch) | |
tree | 3beba1b124a1fd9447f84e963ee998a8fa90a139 /src/metadata.rs | |
parent | daa0761dedf1a970400f6052f7a36bf2a95ff283 (diff) | |
download | subplot-3441b89c83fd2ff94c904ef96230508ad620532e.tar.gz |
metadata: Acquire the template spec during doc load if possible
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/metadata.rs')
-rw-r--r-- | src/metadata.rs | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/metadata.rs b/src/metadata.rs index 69544c4..b947854 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -1,5 +1,5 @@ -use crate::Bindings; -use crate::Result; +use crate::{resource, Result}; +use crate::{Bindings, TemplateSpec}; use std::ops::Deref; use std::path::{Path, PathBuf}; @@ -15,6 +15,7 @@ pub struct Metadata { bindings: Bindings, functions_filenames: Vec<PathBuf>, template: Option<String>, + spec: Option<TemplateSpec>, bibliographies: Vec<PathBuf>, /// Extra class names which should be considered 'correct' for this document classes: Vec<String>, @@ -30,7 +31,12 @@ impl Metadata { let date = get_date(&doc.meta); let bindings_filenames = get_bindings_filenames(basedir.as_ref(), &doc.meta); let functions_filenames = get_functions_filenames(basedir.as_ref(), &doc.meta); - let template = get_template_name(&doc.meta)?; + let (template, spec) = if let Some((template, spec)) = get_template_spec(&doc.meta)? { + resource::set_template(&template); + (Some(template), Some(spec)) + } else { + (None, None) + }; let mut bindings = Bindings::new(); let bibliographies = get_bibliographies(basedir.as_ref(), &doc.meta); @@ -44,6 +50,7 @@ impl Metadata { bindings, functions_filenames, template, + spec, bibliographies, classes, }) @@ -132,9 +139,15 @@ where get_paths(basedir, map, "functions") } -fn get_template_name(map: &Mapp) -> Result<Option<String>> { +fn get_template_spec(map: &Mapp) -> Result<Option<(String, TemplateSpec)>> { match get_string(map, "template") { - Some(s) => Ok(Some(s)), + Some(s) => { + let mut spec_path = PathBuf::from(&s); + spec_path.push("template"); + spec_path.push("template.yaml"); + let spec = TemplateSpec::from_file(&spec_path)?; + Ok(Some((s, spec))) + } None => Ok(None), } } |