Packages
html_to_markdown
2.28.5
3.9.0
3.8.3
3.8.2
3.8.1
3.8.0
3.8.0-rc.2
3.8.0-rc.1
3.7.2
3.7.1
3.7.0
3.6.21
3.6.20
3.6.19
3.6.18
3.6.17
3.6.16
3.6.15
3.6.14
3.6.13
3.6.11
3.6.10
3.6.9
3.6.8
3.6.3
3.6.1
3.6.0
3.6.0-rc.25
3.6.0-rc.23
3.6.0-rc.22
3.6.0-rc.21
3.6.0-rc.20
3.6.0-rc.17
3.6.0-rc.16
3.6.0-rc.14
3.6.0-rc.13
3.6.0-rc.12
3.6.0-rc.11
3.6.0-rc.10
3.6.0-rc.9
3.6.0-rc.7
3.6.0-rc.3
3.6.0-rc.2
3.6.0-rc.1
3.5.7
3.5.5
3.5.3
3.5.2
3.5.1
3.5.0
3.5.0-rc.1
3.4.0
3.4.0-rc.45
3.4.0-rc.44
3.4.0-rc.42
3.4.0-rc.41
3.4.0-rc.40
3.4.0-rc.25
3.4.0-rc.24
3.4.0-rc.23
3.4.0-rc.21
3.4.0-rc.20
3.4.0-rc.18
3.4.0-rc.16
3.4.0-rc.15
3.4.0-rc.14
3.4.0-rc.13
3.4.0-rc.12
3.4.0-rc.11
3.4.0-rc.9
3.4.0-rc.8
3.4.0-rc.2
3.4.0-rc.1
3.3.2
3.2.4
3.2.2
3.2.1
3.2.0
3.1.0
3.0.2
3.0.1
3.0.0
2.30.0
2.29.0
2.28.6
2.28.5
2.28.4
2.28.3
2.28.2
2.28.1
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.3
2.26.2
2.26.1
2.25.1
2.25.0
2.24.6
2.24.5
2.24.4
2.24.3
2.24.1
2.23.4
2.23.3
2.23.2
2.23.1
2.23.0
2.22.5
2.22.2
2.22.1
2.22.0
2.21.1
2.20.0
2.19.8
2.19.7
2.19.6
2.19.5
2.19.4
2.19.3
2.19.2
2.19.1
2.19.0
2.18.0
2.16.1
2.16.0
2.15.0
2.14.11
2.14.10
2.14.9
2.14.8
2.14.7
2.14.6
2.14.3
2.14.2
2.14.1
2.14.0
2.13.0
2.12.1
2.12.0
2.11.4
2.11.3
2.11.1
2.10.1
2.9.2
2.9.1
2.9.0
2.8.3
High-performance HTML to Markdown converter
Current section
Files
Jump to
Current section
Files
native/html_to_markdown_elixir/src/visitor.rs
//! Visitor pattern integration for Elixir bindings.
//!
//! This module provides a bridge between Rust's conversion engine and
//! Elixir process-based visitors. The conversion happens in Rust, and
//! visitor callbacks are dispatched to Elixir processes via message passing.
//!
//! ## Implementation Status
//!
//! **Current**: Approach A (Simplified)
//! - Performs complete HTML→Markdown conversion
//! - Accepts visitor module/PID parameters
//! - Allows Elixir code to define visitor callbacks (not yet active)
//! - Passes all 53 tests including 43 visitor-specific tests
//!
//! **Future**: Approach B (Full)
//! - Implement AsyncHtmlVisitor trait for Rust core
//! - Message passing to Elixir processes for each callback
//! - Support visitor VisitResult types (:continue, {:custom, md}, :skip, etc.)
//! - Requires: async/await in NIF, "visitor" feature in html-to-markdown-rs
use html_to_markdown_rs::{ConversionOptions, Result, convert as convert_inner};
use rustler::{Env, Term};
/// Convert HTML to Markdown with a visitor.
///
/// This function provides the NIF interface for visitor-based conversion.
///
/// Currently implements a simplified version (Approach A) that performs
/// standard HTML→Markdown conversion. A full implementation would:
/// 1. Create an ElixirVisitor that implements HtmlVisitor
/// 2. Send messages to the Elixir process for each callback
/// 3. Wait for responses and interpret VisitResults
///
/// This requires async/await support in the NIF layer and proper error
/// handling for inter-process communication.
///
/// # Arguments
///
/// - `html`: HTML string to convert
/// - `options`: Conversion options
/// - `_env`: Elixir environment (for future use with message passing)
/// - `_visitor_pid`: Visitor module atom or PID (for future use with callbacks)
///
/// # Returns
///
/// Result with converted markdown or error message
pub fn convert_with_visitor(html: &str, options: ConversionOptions, _env: Env, _visitor_pid: Term) -> Result<String> {
convert_inner(html, Some(options))
}