Newer
Older
use super::page::{Page, PageTemplate};
use crate::static_files::StaticFilesManager;
pub struct WebSiteBuilder {
root_page: Page,
#[serde(default = "Vec::new")]
assets_index: Vec<String>,
templates: Vec<PageTemplate>,
}
#[derive(Debug, Clone)]
pub static_files_manager: StaticFilesManager,
impl WebSiteBuilder {
pub fn from_json(json: &str) -> Self {
serde_json::from_str(json).unwrap()
}
pub fn with_static_files_manager(
&mut self,
static_files_manager: StaticFilesManager,
) -> WebSite {
WebSite {
root_page: self.root_page.clone(),
static_files_manager: {
let mut static_files_manager = static_files_manager;
static_files_manager.add_pathes(&self.assets_index);
static_files_manager
},
templates: self.templates.clone(),
pub fn load(config: &AppConfig) -> WebSiteBuilder {
let file_path = match &config.load {
None => std::env::current_dir()
.unwrap()
.join("templates")
.join("new_website.json"),
Some(pth) => pth.clone(),
};
WebSiteBuilder::from_json(&std::fs::read_to_string(file_path).unwrap())
}
pub fn build(&mut self) -> Result<Self, String> {
if let Err(err) = self.root_page.build(
&self.templates,
PathBuf::from("/"),
&self.static_files_manager,
) {
return Err(err);
};
Ok(self.clone())