use serde::Serialize; use super::render_context::RenderContext; 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::macros::render; 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), } render!(RenderElement, IElement, original, render_context, { match original { IElement::Paragraph(inner) => Ok(RenderElement::Paragraph(RenderParagraph::new( render_context.clone(), inner, )?)), IElement::PlainList(inner) => Ok(RenderElement::PlainList(RenderPlainList::new( render_context.clone(), inner, )?)), IElement::CenterBlock(inner) => Ok(RenderElement::CenterBlock(RenderCenterBlock::new( render_context.clone(), inner, )?)), IElement::QuoteBlock(inner) => Ok(RenderElement::QuoteBlock(RenderQuoteBlock::new( render_context.clone(), inner, )?)), IElement::SpecialBlock(inner) => Ok(RenderElement::SpecialBlock(RenderSpecialBlock::new( render_context.clone(), inner, )?)), IElement::DynamicBlock(inner) => Ok(RenderElement::DynamicBlock(RenderDynamicBlock::new( render_context.clone(), inner, )?)), IElement::FootnoteDefinition(inner) => Ok(RenderElement::FootnoteDefinition( RenderFootnoteDefinition::new(render_context.clone(), inner)?, )), IElement::Comment(inner) => Ok(RenderElement::Comment(RenderComment::new( render_context.clone(), inner, )?)), IElement::Drawer(inner) => Ok(RenderElement::Drawer(RenderDrawer::new( render_context.clone(), inner, )?)), IElement::PropertyDrawer(inner) => Ok(RenderElement::PropertyDrawer( RenderPropertyDrawer::new(render_context.clone(), inner)?, )), IElement::Table(inner) => Ok(RenderElement::Table(RenderTable::new( render_context.clone(), inner, )?)), IElement::VerseBlock(inner) => Ok(RenderElement::VerseBlock(RenderVerseBlock::new( render_context.clone(), inner, )?)), IElement::CommentBlock(inner) => Ok(RenderElement::CommentBlock(RenderCommentBlock::new( render_context.clone(), inner, )?)), IElement::ExampleBlock(inner) => Ok(RenderElement::ExampleBlock(RenderExampleBlock::new( render_context.clone(), inner, )?)), IElement::ExportBlock(inner) => Ok(RenderElement::ExportBlock(RenderExportBlock::new( render_context.clone(), inner, )?)), IElement::SrcBlock(inner) => Ok(RenderElement::SrcBlock(RenderSrcBlock::new( render_context.clone(), inner, )?)), IElement::Clock(inner) => Ok(RenderElement::Clock(RenderClock::new( render_context.clone(), inner, )?)), IElement::DiarySexp(inner) => Ok(RenderElement::DiarySexp(RenderDiarySexp::new( render_context.clone(), inner, )?)), IElement::Planning(inner) => Ok(RenderElement::Planning(RenderPlanning::new( render_context.clone(), inner, )?)), IElement::FixedWidthArea(inner) => Ok(RenderElement::FixedWidthArea( RenderFixedWidthArea::new(render_context.clone(), inner)?, )), IElement::HorizontalRule(inner) => Ok(RenderElement::HorizontalRule( RenderHorizontalRule::new(render_context.clone(), inner)?, )), IElement::Keyword(inner) => Ok(RenderElement::Keyword(RenderKeyword::new( render_context.clone(), inner, )?)), IElement::BabelCall(inner) => Ok(RenderElement::BabelCall(RenderBabelCall::new( render_context.clone(), inner, )?)), IElement::LatexEnvironment(inner) => Ok(RenderElement::LatexEnvironment( RenderLatexEnvironment::new(render_context.clone(), inner)?, )), } });