use serde::Serialize; use super::render_context::RenderContext; use crate::error::CustomError; use crate::intermediate::ISrcBlock; use super::macros::render; #[derive(Debug, Serialize)] #[serde(untagged)] pub(crate) enum RenderSrcBlock { Plain(RenderPlainSrcBlock), Highlighted(RenderHighlightedSrcBlock), } #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "src_block")] pub(crate) struct RenderPlainSrcBlock { lines: Vec, language: Option, post_blank: organic::types::PostBlank, } #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "highlighted_src_block")] pub(crate) struct RenderHighlightedSrcBlock { lines: Vec, language: Option, post_blank: organic::types::PostBlank, } render!(RenderSrcBlock, ISrcBlock, original, _render_context, { match original { ISrcBlock::Plain(plain_src_block) => Ok(RenderSrcBlock::Plain(RenderPlainSrcBlock { lines: plain_src_block.lines.clone(), language: plain_src_block.language.clone(), post_blank: plain_src_block.post_blank, })), ISrcBlock::Highlighted(_) => todo!(), } });