pub trait FromVariant: Sized {
    fn from_variant(variant: &Variant) -> Result<Self, FromVariantError>;
}
Expand description

Types that can be converted from a Variant. Conversions are performed in Rust, and can be implemented for custom types.

FromVariant generally avoids inexact conversions, favoring returning an error instead, with the noted exception of integer and float types that are not supported by Godot natively. This is stricter than what GDScript performs by default. For weakly-typed coercions of GDScript built-in typed, see CoerceFromVariant instead.

This trait is used for argument types of exported methods.

Option<T> and MaybeNot<T>

Option<T> requires the Variant to be T or Nil, in that order. For looser semantics, use MaybeNot<T>, which will catch all variant values that are not T as well.

Vec<T>

The FromVariant implementation for Vec<T> only allow homogeneous arrays. If you want to manually handle potentially heterogeneous values e.g. for error reporting, use VariantArray directly or compose with an appropriate wrapper: Vec<Option<T>> or Vec<MaybeNot<T>>.

Deriving FromVariant

The derive macro provides implementation consistent with derived ToVariant. See ToVariant for detailed documentation.

Required Methods§

Implementations on Foreign Types§

source§

impl FromVariant for ()

source§

impl FromVariant for f64

source§

impl FromVariant for i64

source§

impl FromVariant for u64

source§

impl FromVariant for bool

source§

impl FromVariant for i8

source§

impl FromVariant for i16

source§

impl FromVariant for i32

source§

impl FromVariant for isize

source§

impl FromVariant for u8

source§

impl FromVariant for u16

source§

impl FromVariant for u32

source§

impl FromVariant for usize

source§

impl FromVariant for f32

source§

impl FromVariant for String

source§

impl<T> FromVariant for PhantomData<T>

source§

impl<T: FromVariant> FromVariant for Option<T>

source§

impl<T: FromVariant, E: FromVariant> FromVariant for Result<T, E>

source§

impl<T: FromVariant> FromVariant for Vec<T>

source§

impl<K: FromVariant + Hash + Eq, V: FromVariant> FromVariant for HashMap<K, V>

Expects a Variant populated with a Dictionary and tries to convert it into a HashMap.

Since Rust’s HashMap is unordered, there is no guarantee about the resulting element order. In fact it is possible that two program invocations cause a different output.

source§

impl<T: FromVariant + Eq + Hash> FromVariant for HashSet<T>

Expects a Variant populated with a VariantArray and tries to convert it into a HashSet.

Since Rust’s HashSet is unordered, there is no guarantee about the resulting element order. In fact it is possible that two program invocations cause a different output.

source§

impl<T1: FromVariant, T2: FromVariant, T3: FromVariant, T4: FromVariant, T5: FromVariant, T6: FromVariant, T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

impl<T2: FromVariant, T3: FromVariant, T4: FromVariant, T5: FromVariant, T6: FromVariant, T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

impl<T3: FromVariant, T4: FromVariant, T5: FromVariant, T6: FromVariant, T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

impl<T4: FromVariant, T5: FromVariant, T6: FromVariant, T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

impl<T5: FromVariant, T6: FromVariant, T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T5, T6, T7, T8, T9, T10, T11, T12)

source§

impl<T6: FromVariant, T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T6, T7, T8, T9, T10, T11, T12)

source§

impl<T7: FromVariant, T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T7, T8, T9, T10, T11, T12)

source§

impl<T8: FromVariant, T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T8, T9, T10, T11, T12)

source§

impl<T9: FromVariant, T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T9, T10, T11, T12)

source§

impl<T10: FromVariant, T11: FromVariant, T12: FromVariant> FromVariant for (T10, T11, T12)

source§

impl<T11: FromVariant, T12: FromVariant> FromVariant for (T11, T12)

source§

impl<T12: FromVariant> FromVariant for (T12,)

Implementors§