Trait gdnative::core_types::FromVariant
source · 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§
fn from_variant(variant: &Variant) -> Result<Self, FromVariantError>
Implementations on Foreign Types§
source§impl<T12> FromVariant for (T12,)where
T12: FromVariant,
impl<T12> FromVariant for (T12,)where
T12: FromVariant,
fn from_variant(v: &Variant) -> Result<(T12,), FromVariantError>
source§impl FromVariant for f32
impl FromVariant for f32
fn from_variant(variant: &Variant) -> Result<f32, FromVariantError>
source§impl<K, V> FromVariant for HashMap<K, V, RandomState>where
K: FromVariant + Hash + Eq,
V: FromVariant,
impl<K, V> FromVariant for HashMap<K, V, RandomState>where
K: FromVariant + Hash + Eq,
V: FromVariant,
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.
fn from_variant(
variant: &Variant
) -> Result<HashMap<K, V, RandomState>, FromVariantError>
source§impl FromVariant for isize
impl FromVariant for isize
fn from_variant(variant: &Variant) -> Result<isize, FromVariantError>
source§impl FromVariant for i64
impl FromVariant for i64
fn from_variant(variant: &Variant) -> Result<i64, FromVariantError>
source§impl<T> FromVariant for Vec<T, Global>where
T: FromVariant,
impl<T> FromVariant for Vec<T, Global>where
T: FromVariant,
fn from_variant(variant: &Variant) -> Result<Vec<T, Global>, FromVariantError>
source§impl FromVariant for ()
impl FromVariant for ()
fn from_variant(variant: &Variant) -> Result<(), FromVariantError>
source§impl<T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
impl<T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
source§impl FromVariant for usize
impl FromVariant for usize
fn from_variant(variant: &Variant) -> Result<usize, FromVariantError>
source§impl<T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T5, T6, T7, T8, T9, T10, T11, T12)where
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
impl<T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T5, T6, T7, T8, T9, T10, T11, T12)where
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
source§impl FromVariant for u64
impl FromVariant for u64
fn from_variant(variant: &Variant) -> Result<u64, FromVariantError>
source§impl FromVariant for i32
impl FromVariant for i32
fn from_variant(variant: &Variant) -> Result<i32, FromVariantError>
source§impl FromVariant for i16
impl FromVariant for i16
fn from_variant(variant: &Variant) -> Result<i16, FromVariantError>
source§impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T1: FromVariant,
T2: FromVariant,
T3: FromVariant,
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
impl<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T1: FromVariant,
T2: FromVariant,
T3: FromVariant,
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
source§impl FromVariant for u16
impl FromVariant for u16
fn from_variant(variant: &Variant) -> Result<u16, FromVariantError>
source§impl FromVariant for bool
impl FromVariant for bool
fn from_variant(variant: &Variant) -> Result<bool, FromVariantError>
source§impl<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T3: FromVariant,
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
impl<T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T3: FromVariant,
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
source§impl FromVariant for u32
impl FromVariant for u32
fn from_variant(variant: &Variant) -> Result<u32, FromVariantError>
source§impl FromVariant for u8
impl FromVariant for u8
fn from_variant(variant: &Variant) -> Result<u8, FromVariantError>
source§impl<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T2: FromVariant,
T3: FromVariant,
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
impl<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> FromVariant for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T2: FromVariant,
T3: FromVariant,
T4: FromVariant,
T5: FromVariant,
T6: FromVariant,
T7: FromVariant,
T8: FromVariant,
T9: FromVariant,
T10: FromVariant,
T11: FromVariant,
T12: FromVariant,
source§impl<T> FromVariant for HashSet<T, RandomState>where
T: FromVariant + Eq + Hash,
impl<T> FromVariant for HashSet<T, RandomState>where
T: FromVariant + Eq + Hash,
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.