Struct DynamicEnum
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§
§impl DynamicEnum
impl DynamicEnum
pub fn new<I, V>(variant_name: I, variant: V) -> DynamicEnum
pub fn new<I, V>(variant_name: I, variant: V) -> DynamicEnum
Create a new DynamicEnum to represent an enum at runtime.
§Arguments
variant_name: The name of the variant to setvariant: The variant data
pub fn new_with_index<I, V>(
variant_index: usize,
variant_name: I,
variant: V,
) -> DynamicEnum
pub fn new_with_index<I, V>( variant_index: usize, variant_name: I, variant: V, ) -> DynamicEnum
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
pub 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.
pub fn set_variant<I, V>(&mut self, name: I, variant: V)
pub fn set_variant<I, V>(&mut self, name: I, variant: V)
Set the current enum variant represented by this struct.
pub fn set_variant_with_index<I, V>(
&mut self,
variant_index: usize,
variant_name: I,
variant: V,
)
pub fn set_variant_with_index<I, V>( &mut self, variant_index: usize, variant_name: I, variant: V, )
Set the current enum variant represented by this struct along with its variant index.
pub fn variant(&self) -> &DynamicVariant
pub fn variant(&self) -> &DynamicVariant
Get a reference to the DynamicVariant contained in self.
pub 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.
pub fn from<TEnum>(value: TEnum) -> DynamicEnumwhere
TEnum: Enum,
pub fn from<TEnum>(value: TEnum) -> DynamicEnumwhere
TEnum: Enum,
Create a DynamicEnum from an existing one.
This is functionally the same as DynamicEnum::from_ref except it takes an owned value.
pub fn from_ref<TEnum>(value: &TEnum) -> DynamicEnum
pub fn from_ref<TEnum>(value: &TEnum) -> DynamicEnum
Create a DynamicEnum from an existing one.
This is functionally the same as DynamicEnum::from except it takes a reference.
Trait Implementations§
§impl Debug for DynamicEnum
impl Debug for DynamicEnum
§impl Default for DynamicEnum
impl Default for DynamicEnum
§fn default() -> DynamicEnum
fn default() -> DynamicEnum
§impl Enum for DynamicEnum
impl Enum for DynamicEnum
§fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
§fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
§fn field_mut(
&mut self,
name: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, name: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
§fn field_at_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
§fn index_of(&self, name: &str) -> Option<usize>
fn index_of(&self, name: &str) -> Option<usize>
§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
§fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
§fn variant_name(&self) -> &str
fn variant_name(&self) -> &str
§fn variant_index(&self) -> usize
fn variant_index(&self) -> usize
§fn variant_type(&self) -> VariantType
fn variant_type(&self) -> VariantType
§fn to_dynamic_enum(&self) -> DynamicEnum
fn to_dynamic_enum(&self) -> DynamicEnum
DynamicEnum from this enum.§fn is_variant(&self, variant_type: VariantType) -> bool
fn is_variant(&self, variant_type: VariantType) -> bool
§fn variant_path(&self) -> String
fn variant_path(&self) -> String
§fn get_represented_enum_info(&self) -> Option<&'static EnumInfo>
fn get_represented_enum_info(&self) -> Option<&'static EnumInfo>
None if TypeInfo is not available.§impl PartialReflect for DynamicEnum
impl PartialReflect for DynamicEnum
§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
§fn into_partial_reflect(self: Box<DynamicEnum>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<DynamicEnum>) -> Box<dyn PartialReflect>
§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
§fn try_into_reflect(
self: Box<DynamicEnum>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<DynamicEnum>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
§fn try_apply(
&mut self,
value: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, value: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
§fn reflect_owned(self: Box<DynamicEnum>) -> ReflectOwned
fn reflect_owned(self: Box<DynamicEnum>) -> ReflectOwned
§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self using reflection. Read more§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails. Read more§impl TypePath for DynamicEnum
impl TypePath for DynamicEnum
§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
§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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path.§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident.§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name.§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more