interoptopus_csharp 0.16.0-alpha.20

The C# backend for Interoptopus.
Documentation
use crate::{define_plugin, load_plugin};
use reference_project::plugins::complex::Complex;
use reference_project::types::arrays::{Array, NestedArray};
use reference_project::types::basic::Vec3f32;
use reference_project::types::enums::{EnumPayload, EnumRenamedXYZ};
use std::error::Error;

#[test]
fn define_plugin() -> Result<(), Box<dyn Error>> {
    define_plugin!(Complex, "complex.dll", super::BASE);
    Ok(())
}

#[test]
fn load_plugin() -> Result<(), Box<dyn Error>> {
    let plugin = load_plugin!(Complex, "complex.dll", super::BASE);

    let input = Vec3f32 { x: 1.0, y: 2.0, z: 3.0 };
    let result = plugin.vec3f32(input);
    assert_eq!(result.x, 2.0);
    assert_eq!(result.y, 1.0);
    assert_eq!(result.z, 3.0);

    let result = plugin.enum_payload(EnumPayload::A);
    assert!(matches!(result, EnumPayload::B(v) if v.x == 1.0 && v.y == 2.0 && v.z == 3.0));

    let array = NestedArray {
        field_enum: EnumRenamedXYZ::X,
        field_vec: Default::default(),
        field_bool: false,
        field_int: 0,
        field_array: [0_u16; 5],
        field_array_2: [0_u16; 5],
        field_struct: Array { data: [0_u8; 16] },
    };
    let array = plugin.nested_array(array);
    assert_eq!(array.field_array[1], 2);

    Ok(())
}