mdstream 0.3.0

Streaming-first Markdown middleware for LLM output (committed + pending blocks, render-agnostic).
Documentation
use crate::types::BlockKind;

#[derive(Debug, Clone)]
pub(super) enum BlockMode {
    Unknown,
    Paragraph,
    Heading,
    ThematicBreak,
    CodeFence {
        fence_char: char,
        fence_len: usize,
    },
    CustomBoundary {
        plugin_index: usize,
        started: bool,
    },
    List,
    BlockQuote,
    HtmlBlock {
        stack: Vec<String>,
        in_comment: bool,
    },
    Table,
    MathBlock {
        open_count: usize,
    },
    FootnoteDefinition,
}

impl BlockMode {
    pub(super) fn kind(&self) -> BlockKind {
        match self {
            BlockMode::Paragraph => BlockKind::Paragraph,
            BlockMode::Heading => BlockKind::Heading,
            BlockMode::ThematicBreak => BlockKind::ThematicBreak,
            BlockMode::CodeFence { .. } => BlockKind::CodeFence,
            BlockMode::CustomBoundary { .. } => BlockKind::Unknown,
            BlockMode::List => BlockKind::List,
            BlockMode::BlockQuote => BlockKind::BlockQuote,
            BlockMode::HtmlBlock { .. } => BlockKind::HtmlBlock,
            BlockMode::Table => BlockKind::Table,
            BlockMode::MathBlock { .. } => BlockKind::MathBlock,
            BlockMode::FootnoteDefinition => BlockKind::FootnoteDefinition,
            BlockMode::Unknown => BlockKind::Unknown,
        }
    }
}