Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
website.rs 1.69 KiB
Newer Older
use super::page::{Page, PageTemplate};
peterrabbit's avatar
peterrabbit committed
use crate::app::AppConfig;
use crate::static_files::StaticFilesManager;
peterrabbit's avatar
peterrabbit committed
use serde::{Deserialize, Serialize};
peterrabbit's avatar
peterrabbit committed
use std::path::PathBuf;
peterrabbit's avatar
peterrabbit committed

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct WebSiteBuilder {
    root_page: Page,
    #[serde(default = "Vec::new")]
    assets_index: Vec<String>,
    templates: Vec<PageTemplate>,
}

#[derive(Debug, Clone)]
peterrabbit's avatar
peterrabbit committed
pub struct WebSite {
peterrabbit's avatar
peterrabbit committed
    root_page: Page,
    pub static_files_manager: StaticFilesManager,
peterrabbit's avatar
peterrabbit committed
    templates: Vec<PageTemplate>,
peterrabbit's avatar
peterrabbit committed
}

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(),
peterrabbit's avatar
peterrabbit committed
        }
    }

    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())
    }
peterrabbit's avatar
peterrabbit committed
impl WebSite {
    pub fn build(&mut self) -> Self {
        self.root_page.build(
            &self.templates,
            PathBuf::from("/"),
            &self.static_files_manager,
peterrabbit's avatar
peterrabbit committed
        );
peterrabbit's avatar
peterrabbit committed
    }