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 TraitcastTarget
s (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 theTypeId
and performing a binary search on it - Used if featureconst_sort
is 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