pub struct DynamicEnum { /* private fields */ }
Expand description
A dynamic representation of an enum.
This allows for enums to be configured at runtime.
§Example
// The original enum value
let mut value: Option<usize> = Some(123);
// Create a DynamicEnum to represent the new value
let mut dyn_enum = DynamicEnum::new(
"None",
DynamicVariant::Unit
);
// Apply the DynamicEnum as a patch to the original value
value.apply(dyn_enum.as_partial_reflect());
// Tada!
assert_eq!(None, value);
Implementations§
Source§impl DynamicEnum
impl DynamicEnum
Sourcepub fn new<I: Into<String>, V: Into<DynamicVariant>>(
variant_name: I,
variant: V,
) -> Self
pub fn new<I: Into<String>, V: Into<DynamicVariant>>( variant_name: I, variant: V, ) -> Self
Create a new DynamicEnum
to represent an enum at runtime.
§Arguments
variant_name
: The name of the variant to setvariant
: The variant data
Sourcepub fn new_with_index<I: Into<String>, V: Into<DynamicVariant>>(
variant_index: usize,
variant_name: I,
variant: V,
) -> Self
pub fn new_with_index<I: Into<String>, V: Into<DynamicVariant>>( variant_index: usize, variant_name: I, variant: V, ) -> Self
Create a new DynamicEnum
with a variant index to represent an enum at runtime.
§Arguments
variant_index
: The index of the variant to setvariant_name
: The name of the variant to setvariant
: The variant data
Sourcepub fn set_represented_type(
&mut self,
represented_type: Option<&'static TypeInfo>,
)
pub fn set_represented_type( &mut self, represented_type: Option<&'static TypeInfo>, )
Sets the type to be represented by this DynamicEnum
.
§Panics
Panics if the given type is not a TypeInfo::Enum
.
Sourcepub fn set_variant<I: Into<String>, V: Into<DynamicVariant>>(
&mut self,
name: I,
variant: V,
)
pub fn set_variant<I: Into<String>, V: Into<DynamicVariant>>( &mut self, name: I, variant: V, )
Set the current enum variant represented by this struct.
Sourcepub fn set_variant_with_index<I: Into<String>, V: Into<DynamicVariant>>(
&mut self,
variant_index: usize,
variant_name: I,
variant: V,
)
pub fn set_variant_with_index<I: Into<String>, V: Into<DynamicVariant>>( &mut self, variant_index: usize, variant_name: I, variant: V, )
Set the current enum variant represented by this struct along with its variant index.
Sourcepub fn variant(&self) -> &DynamicVariant
pub fn variant(&self) -> &DynamicVariant
Get a reference to the DynamicVariant
contained in self
.
Sourcepub fn variant_mut(&mut self) -> &mut DynamicVariant
pub fn variant_mut(&mut self) -> &mut DynamicVariant
Get a mutable reference to the DynamicVariant
contained in self
.
Using the mut reference to switch to a different variant will not update the internal tracking of the variant name and index.
If you want to switch variants, prefer one of the setters:
DynamicEnum::set_variant
or DynamicEnum::set_variant_with_index
.
Sourcepub fn from<TEnum: Enum>(value: TEnum) -> Self
pub fn from<TEnum: Enum>(value: TEnum) -> Self
Create a DynamicEnum
from an existing one.
This is functionally the same as DynamicEnum::from_ref
except it takes an owned value.
Sourcepub fn from_ref<TEnum: Enum + ?Sized>(value: &TEnum) -> Self
pub fn from_ref<TEnum: Enum + ?Sized>(value: &TEnum) -> Self
Create a DynamicEnum
from an existing one.
This is functionally the same as DynamicEnum::from
except it takes a reference.
Trait Implementations§
Source§impl Debug for DynamicEnum
impl Debug for DynamicEnum
Source§impl Default for DynamicEnum
impl Default for DynamicEnum
Source§fn default() -> DynamicEnum
fn default() -> DynamicEnum
Source§impl Enum for DynamicEnum
impl Enum for DynamicEnum
Source§fn field(&self, name: &str) -> Option<&dyn PartialReflect>
fn field(&self, name: &str) -> Option<&dyn PartialReflect>
Source§fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
Source§fn index_of(&self, name: &str) -> Option<usize>
fn index_of(&self, name: &str) -> Option<usize>
Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
Source§fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
Source§fn variant_name(&self) -> &str
fn variant_name(&self) -> &str
Source§fn variant_index(&self) -> usize
fn variant_index(&self) -> usize
Source§fn variant_type(&self) -> VariantType
fn variant_type(&self) -> VariantType
Source§fn clone_dynamic(&self) -> DynamicEnum
fn clone_dynamic(&self) -> DynamicEnum
to_dynamic_enum
insteadSource§fn to_dynamic_enum(&self) -> DynamicEnum
fn to_dynamic_enum(&self) -> DynamicEnum
DynamicEnum
from this enum.Source§fn is_variant(&self, variant_type: VariantType) -> bool
fn is_variant(&self, variant_type: VariantType) -> bool
Source§fn variant_path(&self) -> String
fn variant_path(&self) -> String
Source§impl PartialReflect for DynamicEnum
impl PartialReflect for DynamicEnum
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§fn apply(&mut self, value: &dyn PartialReflect)
fn apply(&mut self, value: &dyn PartialReflect)
Source§fn clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
reflect_clone
. To convert reflected values to dynamic ones, use to_dynamic
.Self
into its dynamic representation. Read moreSource§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self
using reflection. Read moreSource§impl TypePath for DynamicEnum
impl TypePath for DynamicEnum
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Auto Trait Implementations§
impl Freeze for DynamicEnum
impl !RefUnwindSafe for DynamicEnum
impl Send for DynamicEnum
impl Sync for DynamicEnum
impl Unpin for DynamicEnum
impl !UnwindSafe for DynamicEnum
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.