Newer
Older
use super::css::StyleSheet;
use super::html::HtmlDoc;
use super::item::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Page {
template: PageTemplate,
body: PageBody,
pub metadata: PageMetadata,
pub sub_pages: Vec<Page>,
pub html: HtmlDoc,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PageTemplate {
layout: StyleSheet,
name: String,
fixed_contents: Vec<ItemContent>,
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PageBody(Vec<Item>);
impl std::fmt::Display for PageBody {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(
f,
"{}",
&self
.0
.iter()
.map(|i| i.to_string())
.collect::<Vec<String>>()
.join("")
)
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PageMetadata {
pub title: String,
pub lang: String,
pub description: String,
pub url_slug: String,
pub css_src: Vec<String>,
pub js_src: Vec<String>,
}
impl Page {
pub fn build_html(&mut self) {
self.html = HtmlDoc::from_page(self);
"title" => self.metadata.title.to_owned(),
"lang" => self.metadata.lang.to_owned(),
"description" => self.metadata.description.to_owned(),
"slug" => self.metadata.url_slug.to_owned(),
"body" => self.body.to_string(),
// "css" => self.css_src.as_ref().unwrap_or(&String::new()).to_owned(),
// "js" => self.js_src.as_ref().unwrap_or(&String::new()).to_owned(),