use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IElement; use super::keyword::RenderKeyword; use super::paragraph::RenderParagraph; #[derive(Debug, Serialize)] #[serde(untagged)] pub(crate) enum RenderElement { Paragraph(RenderParagraph), Keyword(RenderKeyword), } impl RenderElement { pub(crate) fn new, F: AsRef>( config: &Config, output_directory: D, output_file: F, element: &IElement, ) -> Result { match element { IElement::Paragraph(inner) => Ok(RenderElement::Paragraph(RenderParagraph::new( config, output_directory, output_file, inner, )?)), IElement::Keyword(inner) => Ok(RenderElement::Keyword(RenderKeyword::new( config, output_directory, output_file, inner, )?)), } } }