From 1e7d81d61872d3cf5dd7dee7e2700de383088e25 Mon Sep 17 00:00:00 2001 From: Marco Mastropaolo Date: Tue, 26 Sep 2023 15:41:35 +0200 Subject: [PATCH] Adds a setting to force some types to always be included in the emitted types. This is useful to support, for example, enum types whose values are significant but whose type is not explicitly used in the functions prototypes. --- csbindgen/src/builder.rs | 11 ++++++++++- csbindgen/src/lib.rs | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) 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);