1use super::FullWorkspace;
20use crate::{Error, site::SiteName};
21use std::{collections::HashMap, ops::Deref, path::PathBuf};
22
23pub struct SimplePostWorkspace(pub HashMap<SiteName, SimplePostSite>);
24
25impl SimplePostWorkspace {
26 pub fn new(full: &FullWorkspace) -> Result<Self, Error> {
27 let mut sites = HashMap::new();
28
29 for (site_name, full_site) in &full.sites {
30 let mut post_site = HashMap::new();
31
32 for (asset_path, asset) in &full_site.assets.assets {
33 post_site.insert(asset_path.clone(), asset.clone());
34 }
35
36 for (file_path, file) in full_site.files.as_ref() {
37 post_site.insert(file_path.clone(), file.content.clone());
38 }
39
40 for document in &full_site.documents {
41 post_site.insert(
42 document.rendered.name.path(),
43 document.content.as_bytes().to_owned(),
44 );
45 }
46
47 sites.insert(
48 site_name.clone(),
49 SimplePostSite {
50 base_url: full_site.site.config.base_url.clone(),
51 files: post_site,
52 },
53 );
54 }
55
56 Ok(Self(sites))
57 }
58}
59
60impl Deref for SimplePostWorkspace {
61 type Target = HashMap<SiteName, SimplePostSite>;
62
63 fn deref(&self) -> &Self::Target {
64 &self.0
65 }
66}
67
68pub struct SimplePostSite {
69 pub base_url: String,
70 pub files: HashMap<PathBuf, Vec<u8>>,
71}