cdoc_base/template.rs
1use serde::Deserialize;
2use std::collections::HashMap;
3
4use std::path::PathBuf;
5
6#[derive(Deserialize, Debug, Clone)]
7pub enum TemplateSource {
8 /// Raw source specified in yml file.
9 String(String),
10 /// Path to a file that contains the source (useful for large templates).
11 File(PathBuf),
12 /// Really just uses the exact template of another format
13 Derive(String),
14}
15
16impl TemplateSource {
17 pub fn resolve(&self, map: &HashMap<String, TemplateSource>) -> Option<String> {
18 match self {
19 TemplateSource::String(s) => Some(s.clone()),
20 TemplateSource::Derive(s) => map.get(s).and_then(|item| item.resolve(map)),
21 _ => None,
22 }
23 }
24}