-
-
Notifications
You must be signed in to change notification settings - Fork 360
Expand file tree
/
Copy pathconvert.rs
More file actions
18 lines (18 loc) · 715 Bytes
/
convert.rs
File metadata and controls
18 lines (18 loc) · 715 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#[cfg(feature = "alloc")]
macro_rules! if_downcast_into {
($in_ty:ty, $out_ty:ty, $val:ident, $body:expr) => {{
if ::core::any::TypeId::of::<$in_ty>() == ::core::any::TypeId::of::<$out_ty>() {
// Store the value in an `Option` so we can `take`
// it after casting to `&mut dyn Any`.
let mut slot = Some($val);
// Re-write the `$val` ident with the downcasted value.
let $val = (&mut slot as &mut dyn ::core::any::Any)
.downcast_mut::<Option<$out_ty>>()
.unwrap()
.take()
.unwrap();
// Run the $body in scope of the replaced val.
$body
}
}};
}