macro_rules! test_model {
($plugin:expr, [$($item:expr),* $(,)?]) => {{
let mut inventory = ::interoptopus::inventory::RustInventory::new();
$(let _ = inventory.register($item);)*
let inventory = inventory.validate();
::interoptopus_csharp::RustLibrary::builder(inventory)
.with_extension($plugin)
.build()
.process()
}};
}
macro_rules! test_output {
($file:expr, [$($item:expr),* $(,)?]) => {{
use interoptopus_csharp::dispatch::Dispatch;
use interoptopus_csharp::config::HeaderConfig;
use interoptopus_csharp::output::Target;
use interoptopus::lang::meta::FileEmission;
let mut inventory = ::interoptopus::inventory::RustInventory::new();
$(let _ = inventory.register($item);)*
let inventory = inventory.validate();
let multibuf = ::interoptopus_csharp::RustLibrary::builder(inventory)
.dispatch(Dispatch::custom(|x, _| match x.emission {
FileEmission::Common => Target::new("Interop.Common.cs", "My.Company.Common"),
FileEmission::Default | FileEmission::CustomModule(_) => Target::new("Interop.cs", "My.Company"),
}))
.headers(HeaderConfig { emit_version: false })
.build()
.process()
.unwrap();
let output = multibuf.buffer($file).unwrap();
insta::assert_snapshot!(output);
}};
}
macro_rules! debug_plugin {
(|$inventory:ident, $models:ident| $body:expr) => {{
struct __DebugPlugin;
impl ::interoptopus_csharp::extensions::RustCodegenExtension for __DebugPlugin {
fn post_model_all(
&mut self,
$inventory: &::interoptopus::inventory::RustInventory,
$models: ::interoptopus_csharp::extensions::PostModelPass,
) -> Result<(), ::interoptopus_csharp::Error> {
$body;
Ok(())
}
}
__DebugPlugin
}};
}