Merge pull request #54 from xanathar/pr/always-included-types

Adds a setting to force some types to always be included in the emitted types
This commit is contained in:
hadashiA 2024-01-05 16:37:03 +09:00 committed by GitHub
commit 9fff4241e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 1 deletions

View File

@ -32,6 +32,7 @@ pub struct BindgenOptions {
pub csharp_use_nint_types: bool, pub csharp_use_nint_types: bool,
pub csharp_imported_namespaces: Vec<String>, pub csharp_imported_namespaces: Vec<String>,
pub csharp_generate_const_filter: fn(const_name: &str) -> bool, pub csharp_generate_const_filter: fn(const_name: &str) -> bool,
pub always_included_types: Vec<String>,
} }
impl Default for Builder { impl Default for Builder {
@ -57,6 +58,7 @@ impl Default for Builder {
csharp_use_nint_types: true, csharp_use_nint_types: true,
csharp_imported_namespaces: vec![], csharp_imported_namespaces: vec![],
csharp_generate_const_filter: |_| false, csharp_generate_const_filter: |_| false,
always_included_types: vec![],
}, },
} }
} }
@ -87,7 +89,14 @@ impl Builder {
self 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<I, S>(mut self, always_included_types: I) -> Builder
where I: IntoIterator<Item = S>, 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, /// add original extern call type prefix to rust wrapper,
/// `return {rust_method_type_path}::foo()` /// `return {rust_method_type_path}::foo()`

View File

@ -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 structs = reduce_struct(&structs, &field_map, &using_types);
let enums = reduce_enum(&enums, &field_map, &using_types); let enums = reduce_enum(&enums, &field_map, &using_types);