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 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 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§fn reflect_clone_and_take<T: 'static>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T: 'static>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails. 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 UnsafeUnpin 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.