Skip to content

Commit 46f275a

Browse files
authored
Merge pull request #1201 from godot-rust/feature/variant-relaxed-conversion
Relaxed Variant conversions
2 parents 551c164 + f1ca7b4 commit 46f275a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+505
-98
lines changed

godot-core/src/builtin/aabb.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
use godot_ffi as sys;
9-
use sys::{ffi_methods, GodotFfi};
9+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1010

1111
use crate::builtin::math::ApproxEq;
1212
use crate::builtin::{real, Plane, Vector3, Vector3Axis};
@@ -448,7 +448,7 @@ impl std::fmt::Display for Aabb {
448448
// SAFETY:
449449
// This type is represented as `Self` in Godot, so `*mut Self` is sound.
450450
unsafe impl GodotFfi for Aabb {
451-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::AABB;
451+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::AABB);
452452

453453
ffi_methods! { type sys::GDExtensionTypePtr = *mut Self; .. }
454454
}

godot-core/src/builtin/basis.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
use godot_ffi as sys;
9-
use sys::{ffi_methods, GodotFfi};
9+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1010

1111
use crate::builtin::math::{ApproxEq, FloatExt, GlamConv, GlamType, XformInv};
1212
use crate::builtin::real_consts::FRAC_PI_2;
@@ -631,7 +631,7 @@ impl XformInv<Vector3> for Basis {
631631
// SAFETY:
632632
// This type is represented as `Self` in Godot, so `*mut Self` is sound.
633633
unsafe impl GodotFfi for Basis {
634-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::BASIS;
634+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::BASIS);
635635

636636
ffi_methods! { type sys::GDExtensionTypePtr = *mut Self; .. }
637637
}

godot-core/src/builtin/callable.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::obj::bounds::DynMemory;
1414
use crate::obj::Bounds;
1515
use crate::obj::{Gd, GodotClass, InstanceId};
1616
use std::{fmt, ptr};
17-
use sys::{ffi_methods, GodotFfi};
17+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1818

1919
#[cfg(all(since_api = "4.2", before_api = "4.3"))]
2020
type CallableCustomInfo = sys::GDExtensionCallableCustomInfo;
@@ -441,7 +441,7 @@ impl_builtin_traits! {
441441
// The `opaque` in `Callable` is just a pair of pointers, and requires no special initialization or cleanup
442442
// beyond what is done in `from_opaque` and `drop`. So using `*mut Opaque` is safe.
443443
unsafe impl GodotFfi for Callable {
444-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::CALLABLE;
444+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::CALLABLE);
445445

446446
ffi_methods! { type sys::GDExtensionTypePtr = *mut Opaque;
447447
fn new_from_sys;

godot-core/src/builtin/collections/array.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use crate::meta;
1313
use crate::meta::error::{ConvertError, FromGodotError, FromVariantError};
1414
use crate::meta::{
1515
element_godot_type_name, element_variant_type, ArrayElement, ArrayTypeInfo, AsArg, ClassName,
16-
CowArg, FromGodot, GodotConvert, GodotFfiVariant, GodotType, ParamType, PropertyHintInfo,
17-
RefArg, ToGodot,
16+
CowArg, ExtVariantType, FromGodot, GodotConvert, GodotFfiVariant, GodotType, ParamType,
17+
PropertyHintInfo, RefArg, ToGodot,
1818
};
1919
use crate::obj::{bounds, Bounds, DynGd, Gd, GodotClass};
2020
use crate::registry::property::{BuiltinExport, Export, Var};
@@ -1110,7 +1110,7 @@ impl VariantArray {
11101110
// Arrays are properly initialized through a `from_sys` call, but the ref-count should be incremented
11111111
// as that is the callee's responsibility. Which we do by calling `std::mem::forget(array.clone())`.
11121112
unsafe impl<T: ArrayElement> GodotFfi for Array<T> {
1113-
const VARIANT_TYPE: VariantType = VariantType::ARRAY;
1113+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(VariantType::ARRAY);
11141114

11151115
ffi_methods! { type sys::GDExtensionTypePtr = *mut Opaque; .. }
11161116
}
@@ -1371,9 +1371,9 @@ impl<T: ArrayElement> GodotFfiVariant for Array<T> {
13711371

13721372
fn ffi_from_variant(variant: &Variant) -> Result<Self, ConvertError> {
13731373
// First check if the variant is an array. The array conversion shouldn't be called otherwise.
1374-
if variant.get_type() != Self::VARIANT_TYPE {
1374+
if variant.get_type() != Self::VARIANT_TYPE.variant_as_nil() {
13751375
return Err(FromVariantError::BadType {
1376-
expected: Self::VARIANT_TYPE,
1376+
expected: Self::VARIANT_TYPE.variant_as_nil(),
13771377
actual: variant.get_type(),
13781378
}
13791379
.into_error(variant.clone()));

godot-core/src/builtin/collections/dictionary.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use godot_ffi as sys;
99

1010
use crate::builtin::{inner, Variant, VariantArray};
11-
use crate::meta::{FromGodot, ToGodot};
11+
use crate::meta::{ExtVariantType, FromGodot, ToGodot};
1212
use sys::types::OpaqueDictionary;
1313
use sys::{ffi_methods, interface_fn, GodotFfi};
1414

@@ -394,7 +394,7 @@ impl Dictionary {
394394
// incremented as that is the callee's responsibility. Which we do by calling
395395
// `std::mem::forget(dictionary.clone())`.
396396
unsafe impl GodotFfi for Dictionary {
397-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::DICTIONARY;
397+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::DICTIONARY);
398398

399399
ffi_methods! { type sys::GDExtensionTypePtr = *mut Opaque; .. }
400400
}

godot-core/src/builtin/collections/packed_array.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::meta::{AsArg, ToGodot};
1717
use std::mem::size_of;
1818
use std::{fmt, ops, ptr};
1919
use sys::types::*;
20-
use sys::{ffi_methods, interface_fn, GodotFfi};
20+
use sys::{ffi_methods, interface_fn, ExtVariantType, GodotFfi};
2121

2222
use crate::classes::file_access::CompressionMode;
2323
use crate::meta;
@@ -625,7 +625,7 @@ macro_rules! impl_packed_array {
625625
}
626626

627627
unsafe impl GodotFfi for $PackedArray {
628-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::$VariantType;
628+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::$VariantType);
629629

630630
ffi_methods! { type sys::GDExtensionTypePtr = *mut Opaque; .. }
631631
}

godot-core/src/builtin/color.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::builtin::{ColorHsv, GString};
1313
use crate::meta::{arg_into_ref, AsArg};
1414
use godot_ffi as sys;
1515
use std::ops;
16-
use sys::{ffi_methods, GodotFfi};
16+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1717

1818
/// Color built-in type, in floating-point RGBA format.
1919
///
@@ -358,7 +358,7 @@ impl Color {
358358
// SAFETY:
359359
// This type is represented as `Self` in Godot, so `*mut Self` is sound.
360360
unsafe impl GodotFfi for Color {
361-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::COLOR;
361+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::COLOR);
362362

363363
ffi_methods! { type sys::GDExtensionTypePtr = *mut Self; .. }
364364
}

godot-core/src/builtin/plane.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
use godot_ffi as sys;
9-
use sys::{ffi_methods, GodotFfi};
9+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1010

1111
use crate::builtin::math::{ApproxEq, FloatExt};
1212
use crate::builtin::{real, Vector3};
@@ -265,7 +265,7 @@ impl Neg for Plane {
265265
// SAFETY:
266266
// This type is represented as `Self` in Godot, so `*mut Self` is sound.
267267
unsafe impl GodotFfi for Plane {
268-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::PLANE;
268+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::PLANE);
269269

270270
ffi_methods! { type sys::GDExtensionTypePtr = *mut Self;
271271
fn new_from_sys;

godot-core/src/builtin/projection.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
use godot_ffi as sys;
9-
use sys::{ffi_methods, GodotFfi};
9+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1010

1111
use crate::builtin::inner::InnerProjection;
1212
use crate::builtin::math::{ApproxEq, GlamConv, GlamType};
@@ -557,7 +557,7 @@ impl GlamConv for Projection {
557557

558558
// SAFETY: This type is represented as `Self` in Godot, so `*mut Self` is sound.
559559
unsafe impl GodotFfi for Projection {
560-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::PROJECTION;
560+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::PROJECTION);
561561

562562
ffi_methods! { type sys::GDExtensionTypePtr = *mut Self; .. }
563563
}

godot-core/src/builtin/quaternion.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
use godot_ffi as sys;
9-
use sys::{ffi_methods, GodotFfi};
9+
use sys::{ffi_methods, ExtVariantType, GodotFfi};
1010

1111
use crate::builtin::math::{ApproxEq, FloatExt, GlamConv, GlamType};
1212
use crate::builtin::{inner, real, Basis, EulerOrder, RQuat, RealConv, Vector3};
@@ -337,7 +337,7 @@ impl Mul<Vector3> for Quaternion {
337337
// SAFETY:
338338
// This type is represented as `Self` in Godot, so `*mut Self` is sound.
339339
unsafe impl GodotFfi for Quaternion {
340-
const VARIANT_TYPE: sys::VariantType = sys::VariantType::QUATERNION;
340+
const VARIANT_TYPE: ExtVariantType = ExtVariantType::Concrete(sys::VariantType::QUATERNION);
341341

342342
ffi_methods! { type sys::GDExtensionTypePtr = *mut Self; .. }
343343
}

0 commit comments

Comments
 (0)