use serde::Serialize; use super::render_context::RenderContext; use crate::error::CustomError; use crate::intermediate::IFootnoteDefinition; use crate::intermediate::IRealFootnoteDefinition; use super::ast_node::IntoRenderAstNode; use super::ast_node::RenderAstNode; use super::macros::render; use super::macros::rnoop; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "footnote_definition")] pub(crate) struct RenderFootnoteDefinition { post_blank: organic::types::PostBlank, } rnoop!(RenderFootnoteDefinition, IFootnoteDefinition); #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "real_footnote_definition")] pub(crate) struct RenderRealFootnoteDefinition { definition_id: String, reference_link: String, label: String, contents: Vec, // TODO: Do I need post_blank for real footnote definitions? } render!( RenderRealFootnoteDefinition, IRealFootnoteDefinition, original, render_context, { let contents = { let mut ret = Vec::new(); for obj in original.contents.iter() { ret.push(obj.into_render_ast_node(render_context.clone())?); } ret }; Ok(RenderRealFootnoteDefinition { definition_id: original.get_definition_id(render_context.id_addition), reference_link: format!("#{}", original.get_reference_id(render_context.id_addition)), label: original.get_display_label(), contents, }) } );