Dynamically retrieve reference link destinations (e.g. [text][ref]
/ [ref][]
/ [ref]
)
use pulldown_cmark::{html, BrokenLink, Options, Parser}; fn main() { let input: &str = "Hello world, check out [my website][]."; println!("Parsing the following markdown string:\n{}", input); // Setup callback that sets the URL and title when it encounters // a reference to our home page. let callback = |broken_link: BrokenLink| { if broken_link.reference.as_ref() == "my website" { println!( "Replacing the markdown `{}` of type {:?} with a working link", &input[broken_link.span], broken_link.link_type, ); Some(("http://example.com".into(), "my example website".into())) } else { None } }; // Create a parser with our callback function for broken links. let parser = Parser::new_with_broken_link_callback(input, Options::empty(), Some(callback)); // Write to String buffer. let mut html_output: String = String::with_capacity(input.len() * 3 / 2); html::push_html(&mut html_output, parser); // Check that the output is what we expected. let expected_html: &str = "<p>Hello world, check out <a href=\"http://example.com\" title=\"my example website\">my website</a>.</p>\n"; assert_eq!(expected_html, &html_output); // Write result to stdout. println!("\nHTML output:\n{}", &html_output); }