wasmer-interface-types 0.17.0

WebAssembly Interface Types library for Wasmer
Documentation
use wasmer_interface_types::{
    ast::*, decoders::binary::parse, encoders::binary::ToBytes, interpreter::Instruction, types::*,
    vec1,
};

/// Tests an AST to binary, then binary to AST roundtrip.
#[test]
fn test_binary_encoding_decoding_roundtrip() {
    let original_ast = Interfaces {
        types: vec![
            Type::Function {
                inputs: vec![],
                outputs: vec![],
            },
            Type::Function {
                inputs: vec![InterfaceType::I32, InterfaceType::I32],
                outputs: vec![InterfaceType::S32],
            },
            Type::Record(RecordType {
                fields: vec1![InterfaceType::String, InterfaceType::I32],
            }),
        ],
        imports: vec![Import {
            namespace: "a",
            name: "b",
            signature_type: 0,
        }],
        adapters: vec![Adapter {
            function_type: 0,
            instructions: vec![Instruction::ArgumentGet { index: 1 }],
        }],
        exports: vec![Export {
            name: "ab",
            function_type: 1,
        }],
        implementations: vec![Implementation {
            core_function_type: 0,
            adapter_function_type: 0,
        }],
    };

    let mut binary = vec![];

    original_ast
        .to_bytes(&mut binary)
        .expect("Failed to encode the AST.");

    let (remainder, ast) = parse::<()>(binary.as_slice()).expect("Failed to decode the AST.");

    assert!(remainder.is_empty());

    assert_eq!(original_ast, ast);
}