use crate::domain::model::site::{Asset, Source};
use crate::domain::usecases::site::readers::AssetsReader;
use crate::infra::driven::site::default_theme::enumerate_assets;
pub struct EmbeddedDefaultThemeAssets;
impl AssetsReader for EmbeddedDefaultThemeAssets {
fn assets<'a>(&'a self) -> Box<dyn Iterator<Item = anyhow::Result<Asset>> + 'a> {
Box::new(enumerate_assets().into_iter().map(|(path, bytes)| {
let rel = path.to_string_lossy().replace('\\', "/");
let source = Source::relative_path(&rel)?;
Ok(Asset::new(source, bytes.to_vec()))
}))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn emits_at_least_the_default_stylesheet() {
let reader = EmbeddedDefaultThemeAssets;
let assets: Vec<Asset> = reader.assets().collect::<anyhow::Result<_>>().unwrap();
assert!(
assets
.iter()
.any(|a| a.source.as_str() == "assets/style.css"),
"got sources: {:?}",
assets.iter().map(|a| a.source.as_str()).collect::<Vec<_>>()
);
}
}