interoptopus_csharp 0.16.0-alpha.8

The C# backend for Interoptopus.
use crate::{define_plugin, load_plugin};
use interoptopus::lang::plugin::PluginInfo;
use interoptopus_csharp::DotnetLibrary;
use interoptopus_csharp::dispatch::Dispatch;
use interoptopus_csharp::rt::Try;
use reference_project::types::arrays::{Array, NestedArray};
use reference_project::types::basic::Vec3f32;
use reference_project::types::enums::{EnumPayload, EnumRenamedXYZ};
use std::error::Error;

interoptopus::plugin!(ServiceTry {
    fn create_a(value: u32) -> Try<NestedA>;
    fn get_value() -> Try<u32>;
    async fn create_a_async(value: u32) -> Try<NestedA>;
    async fn get_value_async() -> Try<u32>;

    impl NestedA {
        fn create(value: u32) -> Try<Self>;
        fn get_value(&self) -> Try<u32>;
        async fn create_async(value: u32) -> Try<Self>;
        async fn get_value_async(&self) -> Try<u32>;
    }
});

#[test]
fn build_plugin() -> Result<(), Box<dyn std::error::Error>> {
    define_plugin!(ServiceTry, "exceptions.dll", super::BASE);
    Ok(())
}

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

    let a = plugin.create_a(0).unwrap();
    let b = plugin.get_value().unwrap();
    let x = plugin.nested_a_create(13);
    Ok(())
}