use crate::fs::{FSError, MemFS};
use minijinja::Error;
use std::str;
pub fn memfs_loader(fs: MemFS) -> impl Fn(&str) -> Result<Option<String>, Error> {
move |name| {
match fs.read_file(name) {
Ok(content) => {
match str::from_utf8(content) {
Ok(s) => Ok(Some(s.to_string())),
Err(_) => Err(Error::new(
minijinja::ErrorKind::InvalidOperation,
"Template file contains invalid UTF-8",
)),
}
}
Err(FSError::NotFound(_)) => Ok(None),
Err(e) => Err(Error::new(
minijinja::ErrorKind::InvalidOperation,
format!("Failed to load template: {}", e),
)),
}
}
}