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}