2023-10-27 17:08:58 -04:00
|
|
|
use serde::Serialize;
|
|
|
|
|
2023-12-19 15:42:37 -05:00
|
|
|
use super::render_context::RenderContext;
|
2023-10-27 17:08:58 -04:00
|
|
|
use crate::error::CustomError;
|
|
|
|
use crate::intermediate::ISrcBlock;
|
|
|
|
|
2023-10-31 19:48:05 -04:00
|
|
|
use super::macros::render;
|
|
|
|
|
2025-02-22 15:22:35 -05:00
|
|
|
#[derive(Debug, Serialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
pub(crate) enum RenderSrcBlock {
|
|
|
|
Plain(RenderPlainSrcBlock),
|
|
|
|
Highlighted(RenderHighlightedSrcBlock),
|
|
|
|
}
|
|
|
|
|
2023-10-27 17:08:58 -04:00
|
|
|
#[derive(Debug, Serialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
#[serde(rename = "src_block")]
|
2025-02-22 15:22:35 -05:00
|
|
|
pub(crate) struct RenderPlainSrcBlock {
|
|
|
|
lines: Vec<String>,
|
|
|
|
language: Option<String>,
|
|
|
|
post_blank: organic::types::PostBlank,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Serialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
#[serde(rename = "highlighted_src_block")]
|
|
|
|
pub(crate) struct RenderHighlightedSrcBlock {
|
2023-10-29 09:37:27 -04:00
|
|
|
lines: Vec<String>,
|
2023-12-21 12:07:36 -05:00
|
|
|
language: Option<String>,
|
2023-12-21 14:56:58 -05:00
|
|
|
post_blank: organic::types::PostBlank,
|
2023-10-29 09:37:27 -04:00
|
|
|
}
|
2023-10-27 17:08:58 -04:00
|
|
|
|
2023-12-19 15:42:37 -05:00
|
|
|
render!(RenderSrcBlock, ISrcBlock, original, _render_context, {
|
2025-02-22 15:22:35 -05:00
|
|
|
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!(),
|
|
|
|
}
|
2023-12-19 15:42:37 -05:00
|
|
|
});
|