pub unsafe trait TraitcastableAny: Any {
// Required method
fn traitcast_targets(&self) -> &[TraitcastTarget];
// Provided methods
fn find_traitcast_target(&self, target: TypeId) -> Option<&TraitcastTarget> { ... }
fn type_id(&self) -> TypeId { ... }
}Expand description
A trait marking a type as being potentially able to traitcast from dyn TraitcastableAny to another dyn Trait.
Use this trait instead of the Any trait throughout your program.
This should generally not be manually implemented, but generated by the make_trait_castable attribute macro.
§Safety
The function traitcast_targets must only produce valid TraitcastTarget (That use the metadata associated the the correct source struct).
The function find_traitcast_target must not return Some unless contained value has the correct target TypeId.
Required Methods§
Sourcefn traitcast_targets(&self) -> &[TraitcastTarget]
fn traitcast_targets(&self) -> &[TraitcastTarget]
This function returns a list of all the TraitcastTarget’s to which a trait object can be cast, this is then used by the implementations of TraitcastableAnyInfra to accomplish the traitcast.
The function is used to generate debug output for TraitcastableAny.
The default implementation of find_traitcast_target uses this function by default.
This should generally not be manually implemented, but generated by the make_trait_castable attribute macro.
Provided Methods§
Sourcefn find_traitcast_target(&self, target: TypeId) -> Option<&TraitcastTarget>
fn find_traitcast_target(&self, target: TypeId) -> Option<&TraitcastTarget>
This function can be implemented to support custom TypeId lookup algorithms.
This may be desired when there are lots of TraitcastTargets (30 or more).
Possible strategies:
- Unsorted
Vec<TraitcastTarget>lookup. Hot traits first. - Used by the default implementation. HashMap- Temporarily removed without replacement:
Vec<TraitcastTarget>sorted by theTypeIdand performing a binary search on it - Used if featureconst_sortis used.
Trait Implementations§
Source§impl Debug for dyn TraitcastableAny
impl Debug for dyn TraitcastableAny
Source§impl<Target: ?Sized + 'static> TraitcastableAnyInfra<Target> for dyn TraitcastableAny
impl<Target: ?Sized + 'static> TraitcastableAnyInfra<Target> for dyn TraitcastableAny
Source§default fn downcast_ref(&self) -> Option<&Target>
default fn downcast_ref(&self) -> Option<&Target>
Target, or None if it isn’t. Read moreSource§default unsafe fn downcast_ref_unchecked(&self) -> &Target
default unsafe fn downcast_ref_unchecked(&self) -> &Target
downcast_unchecked only.downcast_ref Read moreSource§default fn downcast_mut(&mut self) -> Option<&mut Target>
default fn downcast_mut(&mut self) -> Option<&mut Target>
Target, or None if it isn’t. Read moreSource§default unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
default unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
downcast_unchecked only.downcast_ref Read moreSource§impl<Target: ?Sized + 'static + Send> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send
impl<Target: ?Sized + 'static + Send> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send
Source§default fn downcast_ref(&self) -> Option<&Target>
default fn downcast_ref(&self) -> Option<&Target>
Target, or None if it isn’t. Read moreSource§default unsafe fn downcast_ref_unchecked(&self) -> &Target
default unsafe fn downcast_ref_unchecked(&self) -> &Target
downcast_unchecked only.downcast_ref Read moreSource§default fn downcast_mut(&mut self) -> Option<&mut Target>
default fn downcast_mut(&mut self) -> Option<&mut Target>
Target, or None if it isn’t. Read moreSource§default unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
default unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
downcast_unchecked only.downcast_ref Read moreSource§impl<Target: ?Sized + 'static + Send + Sync> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send + Sync
impl<Target: ?Sized + 'static + Send + Sync> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send + Sync
Source§default fn downcast_ref(&self) -> Option<&Target>
default fn downcast_ref(&self) -> Option<&Target>
Target, or None if it isn’t. Read moreSource§default unsafe fn downcast_ref_unchecked(&self) -> &Target
default unsafe fn downcast_ref_unchecked(&self) -> &Target
downcast_unchecked only.downcast_ref Read moreSource§default fn downcast_mut(&mut self) -> Option<&mut Target>
default fn downcast_mut(&mut self) -> Option<&mut Target>
Target, or None if it isn’t. Read moreSource§default unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
default unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
downcast_unchecked only.downcast_ref Read moreSource§impl<Target: Sized + 'static + Send + Sync> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send + Sync
impl<Target: Sized + 'static + Send + Sync> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send + Sync
Source§fn downcast_ref(&self) -> Option<&Target>
fn downcast_ref(&self) -> Option<&Target>
Target, or None if it isn’t. Read moreSource§unsafe fn downcast_ref_unchecked(&self) -> &Target
unsafe fn downcast_ref_unchecked(&self) -> &Target
downcast_unchecked only.downcast_ref Read moreSource§fn downcast_mut(&mut self) -> Option<&mut Target>
fn downcast_mut(&mut self) -> Option<&mut Target>
Target, or None if it isn’t. Read moreSource§unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
downcast_unchecked only.downcast_ref Read moreSource§impl<Target: Sized + 'static + Send> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send
impl<Target: Sized + 'static + Send> TraitcastableAnyInfra<Target> for dyn TraitcastableAny + Send
Source§fn downcast_ref(&self) -> Option<&Target>
fn downcast_ref(&self) -> Option<&Target>
Target, or None if it isn’t. Read moreSource§unsafe fn downcast_ref_unchecked(&self) -> &Target
unsafe fn downcast_ref_unchecked(&self) -> &Target
downcast_unchecked only.downcast_ref Read moreSource§fn downcast_mut(&mut self) -> Option<&mut Target>
fn downcast_mut(&mut self) -> Option<&mut Target>
Target, or None if it isn’t. Read moreSource§unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
downcast_unchecked only.downcast_ref Read moreSource§impl<Target: Sized + 'static> TraitcastableAnyInfra<Target> for dyn TraitcastableAny
impl<Target: Sized + 'static> TraitcastableAnyInfra<Target> for dyn TraitcastableAny
Source§fn downcast_ref(&self) -> Option<&Target>
fn downcast_ref(&self) -> Option<&Target>
Target, or None if it isn’t. Read moreSource§unsafe fn downcast_ref_unchecked(&self) -> &Target
unsafe fn downcast_ref_unchecked(&self) -> &Target
downcast_unchecked only.downcast_ref Read moreSource§fn downcast_mut(&mut self) -> Option<&mut Target>
fn downcast_mut(&mut self) -> Option<&mut Target>
Target, or None if it isn’t. Read moreSource§unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
unsafe fn downcast_mut_unchecked(&mut self) -> &mut Target
downcast_unchecked only.downcast_ref Read more