cdoc-base 0.10.0-alpha.1

Base type definitions for the Courses ecosystem.
Documentation
use serde::Deserialize;
use std::collections::HashMap;

use std::path::PathBuf;

#[derive(Deserialize, Debug, Clone)]
pub enum TemplateSource {
    /// Raw source specified in yml file.
    String(String),
    /// Path to a file that contains the source (useful for large templates).
    File(PathBuf),
    /// Really just uses the exact template of another format
    Derive(String),
}

impl TemplateSource {
    pub fn resolve(&self, map: &HashMap<String, TemplateSource>) -> Option<String> {
        match self {
            TemplateSource::String(s) => Some(s.clone()),
            TemplateSource::Derive(s) => map.get(s).and_then(|item| item.resolve(map)),
            _ => None,
        }
    }
}