wasm-parser 0.2.2

Wasm parser with coredump support
Documentation
use crate::parse;
use std::sync::Arc;

#[test]
fn test_basic() {
    let mut coredump_builder =
        wasm_coredump_builder::CoredumpBuilder::new().executable_name("foo.exe");

    {
        let mut thread_builder =
            wasm_coredump_builder::ThreadBuilder::new().thread_name("main-thread");

        {
            let coredump_frame = wasm_coredump_builder::FrameBuilder::new()
                .instanceidx(2)
                .codeoffset(123)
                .funcidx(456)
                .build();
            thread_builder.add_frame(coredump_frame);
        }
        {
            let coredump_frame = wasm_coredump_builder::FrameBuilder::new()
                .instanceidx(21)
                .codeoffset(789)
                .funcidx(0)
                .build();
            thread_builder.add_frame(coredump_frame);
        }

        coredump_builder.add_thread(thread_builder.build());
    }

    // Try encoding and parsing
    let coredump_wasm = coredump_builder.serialize().unwrap();
    let coredump_wasm = parse(&coredump_wasm).unwrap();
    let coredump_wasm = core_wasm_ast::traverse::WasmModule::new(Arc::new(coredump_wasm));
    let coredump = coredump_wasm.get_coredump().unwrap();

    let mut out = String::new();
    wasm_printer::wast::coredump::dump_coredump(&mut out, &coredump).unwrap();

    assert_eq!(
        out,
        r#"(module (coredump)
    (process (name "foo.exe"))
    (thread (name "main-thread")
        (func 456 (instance 2) (offset 123))
        (func 0 (instance 21) (offset 789))
    )
    (memory 0)
)"#
    );
}