diff --git a/src/context/element.rs b/src/context/element.rs index 7a09a62..8a3cf0b 100644 --- a/src/context/element.rs +++ b/src/context/element.rs @@ -6,12 +6,14 @@ 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 { @@ -28,6 +30,12 @@ impl RenderElement { output_file, inner, )?)), + IElement::Keyword(inner) => Ok(RenderElement::Keyword(RenderKeyword::new( + config, + output_directory, + output_file, + inner, + )?)), } } } diff --git a/src/context/keyword.rs b/src/context/keyword.rs new file mode 100644 index 0000000..c9e7a10 --- /dev/null +++ b/src/context/keyword.rs @@ -0,0 +1,23 @@ +use std::path::Path; + +use serde::Serialize; + +use crate::config::Config; +use crate::error::CustomError; +use crate::intermediate::IKeyword; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +#[serde(rename = "keyword")] +pub(crate) struct RenderKeyword {} + +impl RenderKeyword { + pub(crate) fn new, F: AsRef>( + config: &Config, + output_directory: D, + output_file: F, + keyword: &IKeyword, + ) -> Result { + Ok(RenderKeyword {}) + } +} diff --git a/src/context/mod.rs b/src/context/mod.rs index d95cbee..f9b5e75 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -3,6 +3,7 @@ mod document_element; mod element; mod global_settings; mod heading; +mod keyword; mod object; mod paragraph; mod plain_text; diff --git a/src/context/paragraph.rs b/src/context/paragraph.rs index b2760f0..2570f93 100644 --- a/src/context/paragraph.rs +++ b/src/context/paragraph.rs @@ -10,7 +10,7 @@ use super::RenderObject; #[derive(Debug, Serialize)] #[serde(tag = "type")] -#[serde(rename = "heading")] +#[serde(rename = "paragraph")] pub(crate) struct RenderParagraph { children: Vec, } diff --git a/src/context/plain_text.rs b/src/context/plain_text.rs index 24bf142..76f3d78 100644 --- a/src/context/plain_text.rs +++ b/src/context/plain_text.rs @@ -8,7 +8,7 @@ use crate::intermediate::IPlainText; #[derive(Debug, Serialize)] #[serde(tag = "type")] -#[serde(rename = "heading")] +#[serde(rename = "plain_text")] pub(crate) struct RenderPlainText {} impl RenderPlainText { diff --git a/src/intermediate/element.rs b/src/intermediate/element.rs index c891a1a..e9b3feb 100644 --- a/src/intermediate/element.rs +++ b/src/intermediate/element.rs @@ -1,11 +1,13 @@ use crate::error::CustomError; +use super::keyword::IKeyword; use super::registry::Registry; use super::IParagraph; #[derive(Debug)] pub(crate) enum IElement { Paragraph(IParagraph), + Keyword(IKeyword), } impl IElement { @@ -37,7 +39,9 @@ impl IElement { organic::types::Element::Planning(_) => todo!(), organic::types::Element::FixedWidthArea(_) => todo!(), organic::types::Element::HorizontalRule(_) => todo!(), - organic::types::Element::Keyword(_) => todo!(), + organic::types::Element::Keyword(inner) => { + Ok(IElement::Keyword(IKeyword::new(registry, inner).await?)) + } organic::types::Element::BabelCall(_) => todo!(), organic::types::Element::LatexEnvironment(_) => todo!(), } diff --git a/src/intermediate/keyword.rs b/src/intermediate/keyword.rs new file mode 100644 index 0000000..876eff1 --- /dev/null +++ b/src/intermediate/keyword.rs @@ -0,0 +1,17 @@ +use crate::error::CustomError; + +use super::registry::Registry; +use super::IObject; + +/// Essentially a no-op since the keyword is not rendered and any relevant impact on other elements is pulled from the parsed form of keyword. +#[derive(Debug)] +pub(crate) struct IKeyword {} + +impl IKeyword { + pub(crate) async fn new<'parse>( + registry: &mut Registry<'parse>, + keyword: &organic::types::Keyword<'parse>, + ) -> Result { + Ok(IKeyword {}) + } +} diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs index eedc589..293b609 100644 --- a/src/intermediate/mod.rs +++ b/src/intermediate/mod.rs @@ -3,6 +3,7 @@ mod definition; mod document_element; mod element; mod heading; +mod keyword; mod object; mod page; mod paragraph; @@ -16,6 +17,7 @@ pub(crate) use definition::BlogPost; pub(crate) use document_element::IDocumentElement; pub(crate) use element::IElement; pub(crate) use heading::IHeading; +pub(crate) use keyword::IKeyword; pub(crate) use object::IObject; pub(crate) use page::BlogPostPage; pub(crate) use paragraph::IParagraph;