rushdown 0.18.0

A 100% CommonMark-compatible GitHub Flavored Markdown parser and renderer
Documentation
use std::{
    fs::{self, File},
    io::Write,
    path::PathBuf,
};

use pprof::protos::Message;
use rushdown::{new_markdown_to_html, parser, renderer::html};

fn data_path(name: &str) -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("benches")
        .join("fixtures")
        .join(name)
}

fn main() {
    println!("start");

    {
        let guard = pprof::ProfilerGuardBuilder::default()
            .frequency(1000)
            .blocklist(&["libc", "libgcc", "pthread", "vdso"])
            .build()
            .unwrap();
        let path = data_path("data.md");
        let s = fs::read_to_string(&path).expect("failed to read data.md");
        let markdown_to_html = new_markdown_to_html(
            parser::Options::default(),
            html::Options {
                allows_unsafe: true,
                xhtml: true,
                ..Default::default()
            },
            parser::NO_EXTENSIONS,
            html::NO_EXTENSIONS,
        );

        let start = std::time::Instant::now();
        while start.elapsed().as_secs_f64() < 10.0 {
            let mut out = String::new();
            markdown_to_html(&mut out, &s).unwrap()
        }

        match guard.report().build() {
            Ok(report) => {
                let mut file = File::create("profile.pb").unwrap();
                let profile = report.pprof().unwrap();

                let mut content = Vec::new();
                profile.encode(&mut content).unwrap();
                file.write_all(&content).unwrap();
            }
            Err(_) => {}
        };
    }
    println!("end");
}