From 73190155bfeef4cc04fcfb8b123482410bc825af Mon Sep 17 00:00:00 2001 From: hadashiA Date: Thu, 28 Mar 2024 17:01:10 +0900 Subject: [PATCH] Ignore fielded enum --- csbindgen/src/emitter.rs | 2 +- csbindgen/src/parser.rs | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/csbindgen/src/emitter.rs b/csbindgen/src/emitter.rs index 7f17d22..ab48cf7 100644 --- a/csbindgen/src/emitter.rs +++ b/csbindgen/src/emitter.rs @@ -280,7 +280,7 @@ pub fn emit_csharp( Some(x) => format!(" : {}", convert_token_enum_repr(x)), None => "".to_string(), }; - let name = &item.enum_name; + let name = (options.csharp_type_rename)(escape_csharp_name(&item.enum_name)); if item.is_flags { enum_string.push_str_ln(" [Flags]"); } diff --git a/csbindgen/src/parser.rs b/csbindgen/src/parser.rs index c134452..8b6acca 100644 --- a/csbindgen/src/parser.rs +++ b/csbindgen/src/parser.rs @@ -1,7 +1,7 @@ use crate::{alias_map::AliasMap, builder::BindgenOptions, field_map::FieldMap, type_meta::*}; use regex::Regex; use std::collections::HashSet; -use syn::{Abi, ForeignItem, Ident, Item, Meta, MetaNameValue, Pat, ReturnType}; +use syn::{ForeignItem, Item, Meta, MetaNameValue, Pat, ReturnType}; use crate::type_meta::ExportSymbolNaming::{ExportName, NoMangle}; enum FnItem { @@ -117,13 +117,13 @@ fn parse_method(item: FnItem, options: &BindgenOptions) -> Option // check attrs let mut export_naming = NoMangle; - if (!is_foreign_item) { + if !is_foreign_item { let found = attrs.iter() .map(|attr| { let name = &attr.path.segments.last().unwrap().ident; - if (name == "no_mangle") { + if name == "no_mangle" { return Some(NoMangle) - } else if (name == "export_name") { + } else if name == "export_name" { if let Ok(Meta::NameValue(MetaNameValue { lit: syn::Lit::Str(x), .. })) = attr.parse_meta() { return Some(ExportName(x.value())); } @@ -342,6 +342,11 @@ pub fn collect_enum(ast: &syn::File, result: &mut Vec) { let enum_name = t.ident.to_string(); let mut fields = Vec::new(); // Vec<(String, Option)> + if t.variants.iter().any(|x| !matches!(x.fields, syn::Fields::Unit)) { + println!("csbindgen can't handle Enum containing any variable with field, so ignore generate, enum_name: {enum_name}"); + continue; + } + for v in &t.variants { let name = v.ident.to_string(); let mut value = None;