Skip to content

Commit

Permalink
Merge pull request #75 from Cysharp/hadashiA/ignore-fielded-enum
Browse files Browse the repository at this point in the history
Ignore fielded enum
  • Loading branch information
hadashiA authored Mar 28, 2024
2 parents 6f7b417 + 7319015 commit e53634e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion csbindgen/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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]");
}
Expand Down
13 changes: 9 additions & 4 deletions csbindgen/src/parser.rs
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -117,13 +117,13 @@ fn parse_method(item: FnItem, options: &BindgenOptions) -> Option<ExternMethod>

// 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()));
}
Expand Down Expand Up @@ -342,6 +342,11 @@ pub fn collect_enum(ast: &syn::File, result: &mut Vec<RustEnum>) {
let enum_name = t.ident.to_string();
let mut fields = Vec::new(); // Vec<(String, Option<String>)>

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;
Expand Down

0 comments on commit e53634e

Please sign in to comment.