diff --git a/csbindgen/src/builder.rs b/csbindgen/src/builder.rs index ba624a7..97a9126 100644 --- a/csbindgen/src/builder.rs +++ b/csbindgen/src/builder.rs @@ -32,6 +32,7 @@ pub struct BindgenOptions { pub csharp_use_nint_types: bool, pub csharp_imported_namespaces: Vec, pub csharp_generate_const_filter: fn(const_name: &str) -> bool, + pub always_included_types: Vec, } impl Default for Builder { @@ -57,6 +58,7 @@ impl Default for Builder { csharp_use_nint_types: true, csharp_imported_namespaces: vec![], csharp_generate_const_filter: |_| false, + always_included_types: vec![], }, } } @@ -87,7 +89,14 @@ impl Builder { self } - + /// Adds a list of types that will always be considered to be included in the + /// generated bindings, even if not part of any function signature + pub fn always_included_types(mut self, always_included_types: I) -> Builder + where I: IntoIterator, S: ToString + { + self.options.always_included_types.extend(always_included_types.into_iter().map(|v| v.to_string())); + self + } /// add original extern call type prefix to rust wrapper, /// `return {rust_method_type_path}::foo()` diff --git a/csbindgen/src/lib.rs b/csbindgen/src/lib.rs index c3d267e..d8b172a 100644 --- a/csbindgen/src/lib.rs +++ b/csbindgen/src/lib.rs @@ -78,6 +78,8 @@ pub(crate) fn generate( } } + using_types.extend(options.always_included_types.iter().cloned()); + let structs = reduce_struct(&structs, &field_map, &using_types); let enums = reduce_enum(&enums, &field_map, &using_types);