summaryrefslogtreecommitdiff
path: root/src/metadata.rs
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2021-01-10 11:57:30 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2021-01-10 11:57:30 +0000
commit3441b89c83fd2ff94c904ef96230508ad620532e (patch)
tree3beba1b124a1fd9447f84e963ee998a8fa90a139 /src/metadata.rs
parentdaa0761dedf1a970400f6052f7a36bf2a95ff283 (diff)
downloadsubplot-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.rs23
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),
}
}