use std::path::Path; use serde::Serialize; use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IFootnoteDefinition; use crate::intermediate::IRealFootnoteDefinition; use super::ast_node::IntoRenderAstNode; use super::ast_node::RenderAstNode; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "footnote_definition")] pub(crate) struct RenderFootnoteDefinition {} impl RenderFootnoteDefinition { pub(crate) fn new( config: &Config, output_directory: &Path, output_file: &Path, original: &IFootnoteDefinition, ) -> Result { Ok(RenderFootnoteDefinition {}) } } #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "footnote_reference")] pub(crate) struct RenderRealFootnoteDefinition { definition_id: String, reference_link: String, label: String, contents: Vec, } impl RenderRealFootnoteDefinition { pub(crate) fn new( config: &Config, output_directory: &Path, output_file: &Path, original: &IRealFootnoteDefinition, ) -> Result { let contents = { let mut ret = Vec::new(); for obj in original.contents.iter() { ret.push(obj.into_render_ast_node(config, output_directory, output_file)?); } ret }; Ok(RenderRealFootnoteDefinition { definition_id: original.get_definition_id(), reference_link: format!("#{}", original.get_reference_id()), label: original.get_display_label(), contents, }) } }