Newer
Older
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[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,
}
impl Page {
pub fn build_html(&mut self) {
self.html = HtmlDoc::from_page(self);
pub fn build_body_template(&mut self, template: PageTemplate) {
let mut body = template.clone();
self.template = Some(template);
let err = "Couldn't find page-body placeholder";
let body_container = body
.contents
.iter()
.find(|el| el.attrs.get("id").expect(err).eq("page-body"))
.expect(err);
// HINT use HashMap::extend() to insert many values
// TODO concat template with page body (template should have a page body placeholder)
}
"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.as_ref().unwrap_or(&String::new()).to_owned(),
// "js" => self.js.as_ref().unwrap_or(&String::new()).to_owned(),