Merge pull request #38 from wavefunk/feat/extra-namespaces

feat: add extra namespaces to the exported file
This commit is contained in:
Yoshifumi Kawai 2023-08-15 19:50:11 +09:00 committed by GitHub
commit 32a9013d43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

View File

@ -29,6 +29,7 @@ pub struct BindgenOptions {
pub csharp_if_symbol: String, pub csharp_if_symbol: String,
pub csharp_if_dll_name: String, pub csharp_if_dll_name: String,
pub csharp_use_function_pointer: bool, pub csharp_use_function_pointer: bool,
pub csharp_imported_namespaces: Vec<String>,
} }
impl Default for Builder { impl Default for Builder {
@ -51,6 +52,7 @@ impl Default for Builder {
csharp_if_symbol: "".to_string(), csharp_if_symbol: "".to_string(),
csharp_if_dll_name: "".to_string(), csharp_if_dll_name: "".to_string(),
csharp_use_function_pointer: true, csharp_use_function_pointer: true,
csharp_imported_namespaces: vec![],
}, },
} }
} }
@ -109,6 +111,15 @@ impl Builder {
self self
} }
/// configure C# extra import namespace,
/// "using {csharp_namespace};"
pub fn csharp_import_namespace<T: Into<String>>(mut self, csharp_namespace: T) -> Builder {
self.options
.csharp_imported_namespaces
.push(csharp_namespace.into());
self
}
/// configure C# class name(default is `NativeMethods`), /// configure C# class name(default is `NativeMethods`),
/// `public static unsafe partial class {csharp_class_name}` /// `public static unsafe partial class {csharp_class_name}`
pub fn csharp_class_name<T: Into<String>>(mut self, csharp_class_name: T) -> Builder { pub fn csharp_class_name<T: Into<String>>(mut self, csharp_class_name: T) -> Builder {

View File

@ -46,7 +46,7 @@ pub fn emit_rust_method(list: &Vec<ExternMethod>, options: &BindgenOptions) -> S
" "
#[no_mangle] #[no_mangle]
pub unsafe extern \"C\" fn {method_prefix}{method_name}( pub unsafe extern \"C\" fn {method_prefix}{method_name}(
{parameters} {parameters}
){return_line} ){return_line}
{{ {{
{method_type_path2}{method_name}( {method_type_path2}{method_name}(
@ -290,6 +290,11 @@ pub fn emit_csharp(
enum_string.push('\n'); enum_string.push('\n');
} }
let mut imported_namespaces = String::new();
for name in &options.csharp_imported_namespaces {
imported_namespaces.push_str_ln(format!("using {name};").as_str());
}
let result = format!( let result = format!(
"// <auto-generated> "// <auto-generated>
// This code is generated by csbindgen. // This code is generated by csbindgen.
@ -299,6 +304,7 @@ pub fn emit_csharp(
#pragma warning disable CS8981 #pragma warning disable CS8981
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
{imported_namespaces}
namespace {namespace} namespace {namespace}
{{ {{