1#[macro_export]
14macro_rules! make_trait_castable_decl {
15 ($($source:ty => ($($target:path),* $(,)?)),+$(,)?) => {
16 $(
17 $(
18 impl $crate::TraitcastableTo<dyn $target> for $source {
19 const METADATA: ::core::ptr::DynMetadata<dyn $target> = {
20 let self_ptr: *const $source = ::core::ptr::null::<$source>();
21 let dyn_ptr: *const dyn $target = self_ptr as _;
22
23 dyn_ptr.to_raw_parts().1
24 };
25 }
26 )*
27 unsafe impl $crate::TraitcastableAny for $source {
30 fn traitcast_targets(&self) -> &[$crate::TraitcastTarget] {
31 #[allow(clippy::unused_unit)]
32 const TARGETS_LEN: usize = {
33 let a:&[()] = &[$({
34 let _: &dyn $target;
35 ()
36 },)*];
37 a.len()
38 };
39 const TARGETS: [$crate::TraitcastTarget; TARGETS_LEN] = {
40 #[allow(unused_mut)]
41 let mut targets : [$crate::TraitcastTarget; TARGETS_LEN] = [
42 $(
43 $crate::TraitcastTarget::from::<$source, dyn $target>(),
44 )*
45 ];
46 targets
47 };
48 &TARGETS
49 }
50 }
51 )+
52 };
53}