wit-bindgen-cli 0.57.1

CLI tool to generate bindings for WIT documents and the component model.
include!(env!("BINDINGS"));

use crate::test::flavorful::to_test::*;

#[path = "../lists/alloc.rs"]
mod alloc;

struct Component;

export!(Component);

impl Guest for Component {
    fn run() {
        let before = alloc::get();
        run();
        assert_eq!(before, alloc::get());
    }
}

fn run() {
    f_list_in_record1(&ListInRecord1 {
        a: "list_in_record1".to_string(),
    });
    assert_eq!(f_list_in_record2().a, "list_in_record2");

    assert_eq!(
        f_list_in_record3(&ListInRecord3 {
            a: "list_in_record3 input".to_string()
        })
        .a,
        "list_in_record3 output"
    );

    assert_eq!(
        f_list_in_record4(&ListInAlias {
            a: "input4".to_string()
        })
        .a,
        "result4"
    );

    f_list_in_variant1(&Some("foo".to_string()), &Err("bar".to_string()));
    assert_eq!(f_list_in_variant2(), Some("list_in_variant2".to_string()));
    assert_eq!(
        f_list_in_variant3(&Some("input3".to_string())),
        Some("output3".to_string())
    );

    assert!(errno_result().is_err());
    MyErrno::A.to_string();
    _ = format!("{:?}", MyErrno::A);
    fn assert_error<T: std::error::Error>() {}
    assert_error::<MyErrno>();

    assert!(errno_result().is_ok());

    let (a, b) = list_typedefs(&"typedef1".to_string(), &vec!["typedef2".to_string()]);
    assert_eq!(a, b"typedef3");
    assert_eq!(b.len(), 1);
    assert_eq!(b[0], "typedef4");

    let (a, b, c) = list_of_variants(
        &[true, false],
        &[Ok(()), Err(())],
        &[MyErrno::Success, MyErrno::A],
    );
    assert_eq!(a, [false, true]);
    assert_eq!(b, [Err(()), Ok(())]);
    assert_eq!(c, [MyErrno::A, MyErrno::B]);
}