Skip to content

Commit c59ece1

Browse files
committed
Codegen: override enum/bitfield status; change ConnectFlags to bitfield
1 parent 9530704 commit c59ece1

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

godot-codegen/src/models/domain_mapping.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,8 @@ impl UtilityFunction {
559559
impl Enum {
560560
pub fn from_json(json_enum: &JsonEnum, surrounding_class: Option<&TyName>) -> Self {
561561
let godot_name = &json_enum.name;
562-
let is_bitfield = json_enum.is_bitfield;
562+
let is_bitfield = special_cases::is_enum_bitfield(surrounding_class, godot_name)
563+
.unwrap_or(json_enum.is_bitfield);
563564
let is_private = special_cases::is_enum_private(surrounding_class, godot_name);
564565
let is_exhaustive = special_cases::is_enum_exhaustive(surrounding_class, godot_name);
565566

godot-codegen/src/special_cases/special_cases.rs

+15
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,21 @@ pub fn is_enum_exhaustive(class_name: Option<&TyName>, enum_name: &str) -> bool
855855
}
856856
}
857857

858+
/// Overrides Godot's enum/bitfield status.
859+
/// * `Some(true)` -> bitfield
860+
/// * `Some(false)` -> enum
861+
/// * `None` -> keep default
862+
#[rustfmt::skip]
863+
pub fn is_enum_bitfield(class_name: Option<&TyName>, enum_name: &str) -> Option<bool> {
864+
let class_name = class_name.map(|c| c.godot_ty.as_str());
865+
match (class_name, enum_name) {
866+
| (Some("Object"), "ConnectFlags")
867+
868+
=> Some(true),
869+
_ => None
870+
}
871+
}
872+
858873
/// Whether an enum can be combined with another enum (return value) for bitmasking purposes.
859874
///
860875
/// If multiple masks are ever necessary, this can be extended to return a slice instead of Option.

0 commit comments

Comments
 (0)