ParseResult

Struct ParseResult 

Source
pub struct ParseResult {
    pub heading_blocks: Vec<HeadingBlock>,
    pub toc: Vec<TocEntry>,
    pub diagnostics: Vec<Diagnostic>,
    pub line_count: usize,
}
Expand description

The result of parsing a markdown document.

Contains all structured information extracted from the markdown, including heading hierarchy, content blocks, table of contents, and any diagnostic messages generated during parsing.

§Usage Patterns

The parse result provides multiple ways to access the document structure:

  • Heading Blocks: For content indexing and search
  • Table of Contents: For navigation and structure display
  • Diagnostics: For quality assurance and debugging
  • Line Count: For validation and progress reporting

§Examples

§Processing heading blocks:

use blz_core::{MarkdownParser, Result};

let mut parser = MarkdownParser::new()?;
let result = parser.parse("# Title\n\nContent\n\n## Subtitle\n\nMore content")?;

for block in &result.heading_blocks {
    println!("Section: {}", block.path.join(" > "));
    println!("  Lines {}-{}", block.start_line, block.end_line);
    println!("  Content: {} chars", block.content.len());
}

§Generating navigation from TOC:

use blz_core::{MarkdownParser, TocEntry, Result};

fn generate_nav(entries: &[TocEntry], depth: usize) -> String {
    entries
        .iter()
        .map(|entry| {
            let indent = "  ".repeat(depth);
            let default = "Untitled".to_string();
            let title = entry.heading_path.last().unwrap_or(&default);
            format!("{}* {} ({})\n{}",
                indent,
                title,
                entry.lines,
                generate_nav(&entry.children, depth + 1)
            )
        })
        .collect()
}

let mut parser = MarkdownParser::new()?;
let result = parser.parse("# A\n\nContent A\n\n## A.1\n\nContent A.1\n\n### A.1.1\n\nContent A.1.1\n\n## A.2\n\nContent A.2")?;
let nav = generate_nav(&result.toc, 0);
println!("Navigation:\n{}", nav);

Fields§

§heading_blocks: Vec<HeadingBlock>

Structured heading blocks extracted from the document.

Each block represents a section of content under a specific heading hierarchy. Blocks are ordered by their appearance in the document and contain both the heading path and all content until the next same-level or higher-level heading.

§Content Organization

  • Content includes the heading itself and all text below it
  • Text continues until the next same-level or higher-level heading
  • Nested headings create separate blocks with extended paths
  • Documents without headings get a single “Document” block
§toc: Vec<TocEntry>

Hierarchical table of contents extracted from headings.

Provides a nested structure that mirrors the heading hierarchy in the document. Each entry contains the full heading path and line range information.

§Structure

  • Top-level entries correspond to H1 headings
  • Child entries represent nested headings (H2, H3, etc.)
  • Empty when no headings are present in the document
  • Line ranges are 1-based and use “start-end” format
§diagnostics: Vec<Diagnostic>

Diagnostic messages generated during parsing.

Contains warnings, errors, and informational messages about issues found during parsing. These help identify quality problems or processing decisions that users should be aware of.

§Common Diagnostics

  • Missing headings (document has content but no structure)
  • Parse tree errors (tree-sitter detected syntax issues)
  • Encoding problems (invalid UTF-8 sequences)
  • Structure warnings (very deep nesting, empty sections)
§line_count: usize

Total number of lines in the source document.

Used for validation, progress reporting, and ensuring line ranges in heading blocks and TOC entries are within bounds. This count includes empty lines and uses the same line numbering as other components (1-based).

Trait Implementations§

Source§

impl Clone for ParseResult

Source§

fn clone(&self) -> ParseResult

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> Fruit for T
where T: Send + Downcast,