// Copyright (c) 2024 LinZeming
// Released under the MIT License
//
// TemplateLoader — resolves template names to source strings.
//
// For now this is a simple in-memory registry.  File-system loading
// will be added later.

// ---------------------------------------------------------------------------
// TemplateLoader
// ---------------------------------------------------------------------------

///|
/// A simple in-memory template source registry.
pub(all) struct TemplateLoader {
  sources : Map[String, String]
}

///|
/// Create an empty loader.
pub fn TemplateLoader::new() -> TemplateLoader {
  {
    sources: Map::new(),
  }
}

///|
/// Register a named template source.
pub fn TemplateLoader::add(
  self : TemplateLoader,
  name : String,
  source : String
) -> TemplateLoader {
  let sources = self.sources
  sources[name] = source
  { sources: sources }
}

///|
/// Look up a template source by name.
pub fn TemplateLoader::get(self : TemplateLoader, name : String) -> String? {
  for key in self.sources.keys() {
    if key == name {
      return Some(self.sources[key])
    }
  }
  None
}