From 28ad4fd046937c5a86cda5e3858124b4a5d94e7b Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 27 Dec 2023 19:53:07 -0500 Subject: [PATCH] Add conversion to WasmAstNode for wasm Objects. --- src/wasm/angle_link.rs | 6 ++++ src/wasm/bold.rs | 6 ++++ src/wasm/citation.rs | 6 ++++ src/wasm/citation_reference.rs | 6 ++++ src/wasm/code.rs | 6 ++++ src/wasm/entity.rs | 6 ++++ src/wasm/export_snippet.rs | 6 ++++ src/wasm/footnote_reference.rs | 6 ++++ src/wasm/inline_babel_call.rs | 6 ++++ src/wasm/inline_source_block.rs | 6 ++++ src/wasm/italic.rs | 6 ++++ src/wasm/latex_fragment.rs | 6 ++++ src/wasm/line_break.rs | 6 ++++ src/wasm/org_macro.rs | 6 ++++ src/wasm/paragraph.rs | 12 ++++++- src/wasm/plain_link.rs | 6 ++++ src/wasm/plain_text.rs | 6 ++++ src/wasm/radio_link.rs | 6 ++++ src/wasm/radio_target.rs | 6 ++++ src/wasm/regular_link.rs | 6 ++++ src/wasm/statistics_cookie.rs | 6 ++++ src/wasm/strike_through.rs | 6 ++++ src/wasm/subscript.rs | 6 ++++ src/wasm/superscript.rs | 6 ++++ src/wasm/target.rs | 6 ++++ src/wasm/timestamp.rs | 6 ++++ src/wasm/to_wasm.rs | 62 +++++++++++++++++++++++++++++++++ src/wasm/underline.rs | 6 ++++ src/wasm/verbatim.rs | 6 ++++ 29 files changed, 235 insertions(+), 1 deletion(-) diff --git a/src/wasm/angle_link.rs b/src/wasm/angle_link.rs index 0f95252..4cd9b65 100644 --- a/src/wasm/angle_link.rs +++ b/src/wasm/angle_link.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmAngleLink<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::AngleLink(self) + } +} diff --git a/src/wasm/bold.rs b/src/wasm/bold.rs index 678140f..fdb3be6 100644 --- a/src/wasm/bold.rs +++ b/src/wasm/bold.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmBold<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Bold(self) + } +} diff --git a/src/wasm/citation.rs b/src/wasm/citation.rs index 5911976..1622950 100644 --- a/src/wasm/citation.rs +++ b/src/wasm/citation.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmCitation<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Citation(self) + } +} diff --git a/src/wasm/citation_reference.rs b/src/wasm/citation_reference.rs index 36851f9..0950e55 100644 --- a/src/wasm/citation_reference.rs +++ b/src/wasm/citation_reference.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmCitationReference<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::CitationReference(self) + } +} diff --git a/src/wasm/code.rs b/src/wasm/code.rs index b4511ee..be0ee6b 100644 --- a/src/wasm/code.rs +++ b/src/wasm/code.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmCode<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Code(self) + } +} diff --git a/src/wasm/entity.rs b/src/wasm/entity.rs index 14f952d..3a5b318 100644 --- a/src/wasm/entity.rs +++ b/src/wasm/entity.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmEntity<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Entity(self) + } +} diff --git a/src/wasm/export_snippet.rs b/src/wasm/export_snippet.rs index 49baa08..4890edb 100644 --- a/src/wasm/export_snippet.rs +++ b/src/wasm/export_snippet.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmExportSnippet<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::ExportSnippet(self) + } +} diff --git a/src/wasm/footnote_reference.rs b/src/wasm/footnote_reference.rs index 9df8924..5442f46 100644 --- a/src/wasm/footnote_reference.rs +++ b/src/wasm/footnote_reference.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmFootnoteReference<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::FootnoteReference(self) + } +} diff --git a/src/wasm/inline_babel_call.rs b/src/wasm/inline_babel_call.rs index 555f68a..61544ba 100644 --- a/src/wasm/inline_babel_call.rs +++ b/src/wasm/inline_babel_call.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmInlineBabelCall<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::InlineBabelCall(self) + } +} diff --git a/src/wasm/inline_source_block.rs b/src/wasm/inline_source_block.rs index 9a861e3..f6741f4 100644 --- a/src/wasm/inline_source_block.rs +++ b/src/wasm/inline_source_block.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmInlineSourceBlock<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::InlineSourceBlock(self) + } +} diff --git a/src/wasm/italic.rs b/src/wasm/italic.rs index b91d4bd..ad59550 100644 --- a/src/wasm/italic.rs +++ b/src/wasm/italic.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmItalic<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Italic(self) + } +} diff --git a/src/wasm/latex_fragment.rs b/src/wasm/latex_fragment.rs index f7e792e..77c717e 100644 --- a/src/wasm/latex_fragment.rs +++ b/src/wasm/latex_fragment.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmLatexFragment<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::LatexFragment(self) + } +} diff --git a/src/wasm/line_break.rs b/src/wasm/line_break.rs index 8a78a00..2af6cd4 100644 --- a/src/wasm/line_break.rs +++ b/src/wasm/line_break.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmLineBreak<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::LineBreak(self) + } +} diff --git a/src/wasm/org_macro.rs b/src/wasm/org_macro.rs index 49e4ee7..de38405 100644 --- a/src/wasm/org_macro.rs +++ b/src/wasm/org_macro.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmOrgMacro<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::OrgMacro(self) + } +} diff --git a/src/wasm/paragraph.rs b/src/wasm/paragraph.rs index 8c4c0c1..2b75e21 100644 --- a/src/wasm/paragraph.rs +++ b/src/wasm/paragraph.rs @@ -22,9 +22,19 @@ to_wasm!( wasm_context, standard_properties, { + let children = original + .children + .iter() + .map(|child| { + child + .to_wasm(wasm_context.clone()) + .map(Into::>::into) + }) + .collect::, _>>()?; + Ok(WasmParagraph { standard_properties, - children: Vec::new(), + children, }) } ); diff --git a/src/wasm/plain_link.rs b/src/wasm/plain_link.rs index 3f2c63f..69568a3 100644 --- a/src/wasm/plain_link.rs +++ b/src/wasm/plain_link.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmPlainLink<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::PlainLink(self) + } +} diff --git a/src/wasm/plain_text.rs b/src/wasm/plain_text.rs index d4848e4..e8839c8 100644 --- a/src/wasm/plain_text.rs +++ b/src/wasm/plain_text.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmPlainText<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::PlainText(self) + } +} diff --git a/src/wasm/radio_link.rs b/src/wasm/radio_link.rs index af8fe56..58c3395 100644 --- a/src/wasm/radio_link.rs +++ b/src/wasm/radio_link.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmRadioLink<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::RadioLink(self) + } +} diff --git a/src/wasm/radio_target.rs b/src/wasm/radio_target.rs index f816c50..5498faa 100644 --- a/src/wasm/radio_target.rs +++ b/src/wasm/radio_target.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmRadioTarget<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::RadioTarget(self) + } +} diff --git a/src/wasm/regular_link.rs b/src/wasm/regular_link.rs index 85ba05c..b989a36 100644 --- a/src/wasm/regular_link.rs +++ b/src/wasm/regular_link.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmRegularLink<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::RegularLink(self) + } +} diff --git a/src/wasm/statistics_cookie.rs b/src/wasm/statistics_cookie.rs index 36d4adf..4cdd774 100644 --- a/src/wasm/statistics_cookie.rs +++ b/src/wasm/statistics_cookie.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmStatisticsCookie<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::StatisticsCookie(self) + } +} diff --git a/src/wasm/strike_through.rs b/src/wasm/strike_through.rs index 1f10978..08e97c1 100644 --- a/src/wasm/strike_through.rs +++ b/src/wasm/strike_through.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmStrikeThrough<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::StrikeThrough(self) + } +} diff --git a/src/wasm/subscript.rs b/src/wasm/subscript.rs index 5c382a1..3cd668c 100644 --- a/src/wasm/subscript.rs +++ b/src/wasm/subscript.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmSubscript<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Subscript(self) + } +} diff --git a/src/wasm/superscript.rs b/src/wasm/superscript.rs index 2b42685..caf83ff 100644 --- a/src/wasm/superscript.rs +++ b/src/wasm/superscript.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmSuperscript<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Superscript(self) + } +} diff --git a/src/wasm/target.rs b/src/wasm/target.rs index eafeaa0..ff1f533 100644 --- a/src/wasm/target.rs +++ b/src/wasm/target.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmTarget<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Target(self) + } +} diff --git a/src/wasm/timestamp.rs b/src/wasm/timestamp.rs index ccaa89e..38b6ef1 100644 --- a/src/wasm/timestamp.rs +++ b/src/wasm/timestamp.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmTimestamp<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Timestamp(self) + } +} diff --git a/src/wasm/to_wasm.rs b/src/wasm/to_wasm.rs index 5f48374..0db2a2c 100644 --- a/src/wasm/to_wasm.rs +++ b/src/wasm/to_wasm.rs @@ -2,6 +2,7 @@ use super::macros::to_wasm; use super::WasmAstNode; use crate::error::CustomError; use crate::types::Element; +use crate::types::Object; pub trait ToWasm<'p> { type Output; @@ -90,3 +91,64 @@ to_wasm!( } } ); + +to_wasm!( + WasmAstNode<'s, 'p>, + Object<'s>, + original, + wasm_context, + standard_properties, + { + match original { + Object::Bold(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::Italic(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::Underline(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::StrikeThrough(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::Code(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::Verbatim(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::PlainText(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::RegularLink(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::RadioLink(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::RadioTarget(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::PlainLink(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::AngleLink(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::OrgMacro(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::Entity(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::LatexFragment(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::ExportSnippet(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::FootnoteReference(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::Citation(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::CitationReference(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::InlineBabelCall(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::InlineSourceBlock(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::LineBreak(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::Target(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::StatisticsCookie(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::Subscript(inner) => inner.to_wasm(wasm_context).map(Into::::into), + Object::Superscript(inner) => { + inner.to_wasm(wasm_context).map(Into::::into) + } + Object::Timestamp(inner) => inner.to_wasm(wasm_context).map(Into::::into), + } + } +); diff --git a/src/wasm/underline.rs b/src/wasm/underline.rs index 3932df6..11e3830 100644 --- a/src/wasm/underline.rs +++ b/src/wasm/underline.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmUnderline<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Underline(self) + } +} diff --git a/src/wasm/verbatim.rs b/src/wasm/verbatim.rs index 17a2a8a..57ea20d 100644 --- a/src/wasm/verbatim.rs +++ b/src/wasm/verbatim.rs @@ -28,3 +28,9 @@ to_wasm!( }) } ); + +impl<'s, 'p> Into> for WasmVerbatim<'s, 'p> { + fn into(self) -> WasmAstNode<'s, 'p> { + WasmAstNode::Verbatim(self) + } +}