use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IElement; use super::babel_call::RenderBabelCall; use super::center_block::RenderCenterBlock; use super::clock::RenderClock; use super::comment::RenderComment; use super::comment_block::RenderCommentBlock; use super::diary_sexp::RenderDiarySexp; use super::drawer::RenderDrawer; use super::dynamic_block::RenderDynamicBlock; use super::example_block::RenderExampleBlock; use super::export_block::RenderExportBlock; use super::fixed_width_area::RenderFixedWidthArea; use super::footnote_definition::RenderFootnoteDefinition; use super::horizontal_rule::RenderHorizontalRule; use super::keyword::RenderKeyword; use super::latex_environment::RenderLatexEnvironment; use super::paragraph::RenderParagraph; use super::plain_list::RenderPlainList; use super::planning::RenderPlanning; use super::property_drawer::RenderPropertyDrawer; use super::quote_block::RenderQuoteBlock; use super::special_block::RenderSpecialBlock; use super::src_block::RenderSrcBlock; use super::table::RenderTable; use super::verse_block::RenderVerseBlock; #[derive(Debug, Serialize)] #[serde(untagged)] pub(crate) enum RenderElement { Paragraph(RenderParagraph), PlainList(RenderPlainList), CenterBlock(RenderCenterBlock), QuoteBlock(RenderQuoteBlock), SpecialBlock(RenderSpecialBlock), DynamicBlock(RenderDynamicBlock), FootnoteDefinition(RenderFootnoteDefinition), Comment(RenderComment), Drawer(RenderDrawer), PropertyDrawer(RenderPropertyDrawer), Table(RenderTable), VerseBlock(RenderVerseBlock), CommentBlock(RenderCommentBlock), ExampleBlock(RenderExampleBlock), ExportBlock(RenderExportBlock), SrcBlock(RenderSrcBlock), Clock(RenderClock), DiarySexp(RenderDiarySexp), Planning(RenderPlanning), FixedWidthArea(RenderFixedWidthArea), HorizontalRule(RenderHorizontalRule), Keyword(RenderKeyword), BabelCall(RenderBabelCall), LatexEnvironment(RenderLatexEnvironment), } impl RenderElement { pub(crate) fn new( config: &Config, output_directory: &Path, output_file: &Path, element: &IElement, ) -> Result { match element { IElement::Paragraph(inner) => Ok(RenderElement::Paragraph(RenderParagraph::new( config, output_directory, output_file, inner, )?)), IElement::PlainList(inner) => Ok(RenderElement::PlainList(RenderPlainList::new( config, output_directory, output_file, inner, )?)), IElement::CenterBlock(inner) => Ok(RenderElement::CenterBlock(RenderCenterBlock::new( config, output_directory, output_file, inner, )?)), IElement::QuoteBlock(inner) => Ok(RenderElement::QuoteBlock(RenderQuoteBlock::new( config, output_directory, output_file, inner, )?)), IElement::SpecialBlock(inner) => Ok(RenderElement::SpecialBlock( RenderSpecialBlock::new(config, output_directory, output_file, inner)?, )), IElement::DynamicBlock(inner) => Ok(RenderElement::DynamicBlock( RenderDynamicBlock::new(config, output_directory, output_file, inner)?, )), IElement::FootnoteDefinition(inner) => Ok(RenderElement::FootnoteDefinition( RenderFootnoteDefinition::new(config, output_directory, output_file, inner)?, )), IElement::Comment(inner) => Ok(RenderElement::Comment(RenderComment::new( config, output_directory, output_file, inner, )?)), IElement::Drawer(inner) => Ok(RenderElement::Drawer(RenderDrawer::new( config, output_directory, output_file, inner, )?)), IElement::PropertyDrawer(inner) => Ok(RenderElement::PropertyDrawer( RenderPropertyDrawer::new(config, output_directory, output_file, inner)?, )), IElement::Table(inner) => Ok(RenderElement::Table(RenderTable::new( config, output_directory, output_file, inner, )?)), IElement::VerseBlock(inner) => Ok(RenderElement::VerseBlock(RenderVerseBlock::new( config, output_directory, output_file, inner, )?)), IElement::CommentBlock(inner) => Ok(RenderElement::CommentBlock( RenderCommentBlock::new(config, output_directory, output_file, inner)?, )), IElement::ExampleBlock(inner) => Ok(RenderElement::ExampleBlock( RenderExampleBlock::new(config, output_directory, output_file, inner)?, )), IElement::ExportBlock(inner) => Ok(RenderElement::ExportBlock(RenderExportBlock::new( config, output_directory, output_file, inner, )?)), IElement::SrcBlock(inner) => Ok(RenderElement::SrcBlock(RenderSrcBlock::new( config, output_directory, output_file, inner, )?)), IElement::Clock(inner) => Ok(RenderElement::Clock(RenderClock::new( config, output_directory, output_file, inner, )?)), IElement::DiarySexp(inner) => Ok(RenderElement::DiarySexp(RenderDiarySexp::new( config, output_directory, output_file, inner, )?)), IElement::Planning(inner) => Ok(RenderElement::Planning(RenderPlanning::new( config, output_directory, output_file, inner, )?)), IElement::FixedWidthArea(inner) => Ok(RenderElement::FixedWidthArea( RenderFixedWidthArea::new(config, output_directory, output_file, inner)?, )), IElement::HorizontalRule(inner) => Ok(RenderElement::HorizontalRule( RenderHorizontalRule::new(config, output_directory, output_file, inner)?, )), IElement::Keyword(inner) => Ok(RenderElement::Keyword(RenderKeyword::new( config, output_directory, output_file, inner, )?)), IElement::BabelCall(inner) => Ok(RenderElement::BabelCall(RenderBabelCall::new( config, output_directory, output_file, inner, )?)), IElement::LatexEnvironment(inner) => Ok(RenderElement::LatexEnvironment( RenderLatexEnvironment::new(config, output_directory, output_file, inner)?, )), } } }