use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IObject; use super::angle_link::RenderAngleLink; use super::bold::RenderBold; use super::citation::RenderCitation; use super::citation_reference::RenderCitationReference; use super::code::RenderCode; use super::entity::RenderEntity; use super::export_snippet::RenderExportSnippet; use super::footnote_reference::RenderFootnoteReference; use super::inline_babel_call::RenderInlineBabelCall; use super::inline_source_block::RenderInlineSourceBlock; use super::italic::RenderItalic; use super::latex_fragment::RenderLatexFragment; use super::line_break::RenderLineBreak; use super::org_macro::RenderOrgMacro; use super::plain_link::RenderPlainLink; use super::plain_text::RenderPlainText; use super::radio_link::RenderRadioLink; use super::radio_target::RenderRadioTarget; use super::regular_link::RenderRegularLink; use super::statistics_cookie::RenderStatisticsCookie; use super::strike_through::RenderStrikeThrough; use super::subscript::RenderSubscript; use super::superscript::RenderSuperscript; use super::target::RenderTarget; use super::timestamp::RenderTimestamp; use super::underline::RenderUnderline; use super::verbatim::RenderVerbatim; #[derive(Debug, Serialize)] #[serde(untagged)] pub(crate) enum RenderObject { Bold(RenderBold), Italic(RenderItalic), Underline(RenderUnderline), StrikeThrough(RenderStrikeThrough), Code(RenderCode), Verbatim(RenderVerbatim), PlainText(RenderPlainText), RegularLink(RenderRegularLink), RadioLink(RenderRadioLink), RadioTarget(RenderRadioTarget), PlainLink(RenderPlainLink), AngleLink(RenderAngleLink), OrgMacro(RenderOrgMacro), Entity(RenderEntity), LatexFragment(RenderLatexFragment), ExportSnippet(RenderExportSnippet), FootnoteReference(RenderFootnoteReference), Citation(RenderCitation), CitationReference(RenderCitationReference), InlineBabelCall(RenderInlineBabelCall), InlineSourceBlock(RenderInlineSourceBlock), LineBreak(RenderLineBreak), Target(RenderTarget), StatisticsCookie(RenderStatisticsCookie), Subscript(RenderSubscript), Superscript(RenderSuperscript), Timestamp(RenderTimestamp), } impl RenderObject { pub(crate) fn new, F: AsRef>( config: &Config, output_directory: D, output_file: F, object: &IObject, ) -> Result { match object { IObject::Bold(inner) => Ok(RenderObject::Bold(RenderBold::new( config, output_directory, output_file, inner, )?)), IObject::Italic(inner) => Ok(RenderObject::Italic(RenderItalic::new( config, output_directory, output_file, inner, )?)), IObject::Underline(inner) => Ok(RenderObject::Underline(RenderUnderline::new( config, output_directory, output_file, inner, )?)), IObject::StrikeThrough(inner) => Ok(RenderObject::StrikeThrough( RenderStrikeThrough::new(config, output_directory, output_file, inner)?, )), IObject::Code(inner) => Ok(RenderObject::Code(RenderCode::new( config, output_directory, output_file, inner, )?)), IObject::Verbatim(inner) => Ok(RenderObject::Verbatim(RenderVerbatim::new( config, output_directory, output_file, inner, )?)), IObject::PlainText(inner) => Ok(RenderObject::PlainText(RenderPlainText::new( config, output_directory, output_file, inner, )?)), IObject::RegularLink(inner) => Ok(RenderObject::RegularLink(RenderRegularLink::new( config, output_directory, output_file, inner, )?)), IObject::RadioLink(inner) => Ok(RenderObject::RadioLink(RenderRadioLink::new( config, output_directory, output_file, inner, )?)), IObject::RadioTarget(inner) => Ok(RenderObject::RadioTarget(RenderRadioTarget::new( config, output_directory, output_file, inner, )?)), IObject::PlainLink(inner) => Ok(RenderObject::PlainLink(RenderPlainLink::new( config, output_directory, output_file, inner, )?)), IObject::AngleLink(inner) => Ok(RenderObject::AngleLink(RenderAngleLink::new( config, output_directory, output_file, inner, )?)), IObject::OrgMacro(inner) => Ok(RenderObject::OrgMacro(RenderOrgMacro::new( config, output_directory, output_file, inner, )?)), IObject::Entity(inner) => Ok(RenderObject::Entity(RenderEntity::new( config, output_directory, output_file, inner, )?)), IObject::LatexFragment(inner) => Ok(RenderObject::LatexFragment( RenderLatexFragment::new(config, output_directory, output_file, inner)?, )), IObject::ExportSnippet(inner) => Ok(RenderObject::ExportSnippet( RenderExportSnippet::new(config, output_directory, output_file, inner)?, )), IObject::FootnoteReference(inner) => Ok(RenderObject::FootnoteReference( RenderFootnoteReference::new(config, output_directory, output_file, inner)?, )), IObject::Citation(inner) => Ok(RenderObject::Citation(RenderCitation::new( config, output_directory, output_file, inner, )?)), IObject::CitationReference(inner) => Ok(RenderObject::CitationReference( RenderCitationReference::new(config, output_directory, output_file, inner)?, )), IObject::InlineBabelCall(inner) => Ok(RenderObject::InlineBabelCall( RenderInlineBabelCall::new(config, output_directory, output_file, inner)?, )), IObject::InlineSourceBlock(inner) => Ok(RenderObject::InlineSourceBlock( RenderInlineSourceBlock::new(config, output_directory, output_file, inner)?, )), IObject::LineBreak(inner) => Ok(RenderObject::LineBreak(RenderLineBreak::new( config, output_directory, output_file, inner, )?)), IObject::Target(inner) => Ok(RenderObject::Target(RenderTarget::new( config, output_directory, output_file, inner, )?)), IObject::StatisticsCookie(inner) => Ok(RenderObject::StatisticsCookie( RenderStatisticsCookie::new(config, output_directory, output_file, inner)?, )), IObject::Subscript(inner) => Ok(RenderObject::Subscript(RenderSubscript::new( config, output_directory, output_file, inner, )?)), IObject::Superscript(inner) => Ok(RenderObject::Superscript(RenderSuperscript::new( config, output_directory, output_file, inner, )?)), IObject::Timestamp(inner) => Ok(RenderObject::Timestamp(RenderTimestamp::new( config, output_directory, output_file, inner, )?)), } } }