use super::FullWorkspace;
use crate::{Error, site::SiteName};
use std::{collections::HashMap, ops::Deref, path::PathBuf};
pub struct SimplePostWorkspace(pub HashMap<SiteName, SimplePostSite>);
impl SimplePostWorkspace {
pub fn new(full: &FullWorkspace) -> Result<Self, Error> {
let mut sites = HashMap::new();
for (site_name, full_site) in &full.sites {
let mut post_site = HashMap::new();
for (asset_path, asset) in &full_site.assets.assets {
post_site.insert(asset_path.clone(), asset.clone());
}
for (file_path, file) in full_site.files.as_ref() {
post_site.insert(file_path.clone(), file.content.clone());
}
for document in &full_site.documents {
post_site.insert(
document.rendered.name.path(),
document.content.as_bytes().to_owned(),
);
}
sites.insert(
site_name.clone(),
SimplePostSite {
base_url: full_site.site.config.base_url.clone(),
files: post_site,
},
);
}
Ok(Self(sites))
}
}
impl Deref for SimplePostWorkspace {
type Target = HashMap<SiteName, SimplePostSite>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub struct SimplePostSite {
pub base_url: String,
pub files: HashMap<PathBuf, Vec<u8>>,
}