use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IHeading; use super::RenderDocumentElement; use super::RenderObject; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "heading")] pub(crate) struct RenderHeading { level: organic::types::HeadlineLevel, title: Vec, children: Vec, } impl RenderHeading { pub(crate) fn new( config: &Config, output_directory: &Path, output_file: &Path, heading: &IHeading, ) -> Result { let title = { let mut ret = Vec::new(); for obj in heading.title.iter() { ret.push(RenderObject::new( config, output_directory, output_file, obj, )?); } ret }; let children = { let mut ret = Vec::new(); for obj in heading.children.iter() { ret.push(RenderDocumentElement::new( config, output_directory, output_file, obj, )?); } ret }; Ok(RenderHeading { level: heading.level + 1, // Adding 1 because the page title is going to be h1. title, children, }) } }