Macro downcast_rs::impl_downcast [−][src]
macro_rules! impl_downcast {
(@ impl_full $trait_ : ident [$($param_types : tt) *] for
[$($forall_types : ident), *] where [$($preds : tt) *]) => { ... };
(@ impl_full_sync $trait_ : ident [$($param_types : tt) *] for
[$($forall_types : ident), *] where [$($preds : tt) *]) => { ... };
(@ impl_body $trait_ : ident [$($types : tt) *]) => { ... };
(@ impl_body_sync $trait_ : ident [$($types : tt) *]) => { ... };
(@ inject_where [$($before : tt) *] types [] where [] [$($after : tt) *]) => { ... };
(@ inject_where [$($before : tt) *] types [$($types : ident), *] where []
[$($after : tt) *]) => { ... };
(@ inject_where [$($before : tt) *] types [$($types : ident), *] where
[$($preds : tt) +] [$($after : tt) *]) => { ... };
(@ as_item $i : item) => { ... };
($trait_ : ident) => { ... };
($trait_ : ident < >) => { ... };
(sync $trait_ : ident) => { ... };
(sync $trait_ : ident < >) => { ... };
($trait_ : ident < $($types : ident), * >) => { ... };
(sync $trait_ : ident < $($types : ident), * >) => { ... };
($trait_ : ident < $($types : ident), * > where $($preds : tt) +) => { ... };
(sync $trait_ : ident < $($types : ident), * > where $($preds : tt) +) => { ... };
($trait_ : ident assoc $($atypes : ident), *) => { ... };
(sync $trait_ : ident assoc $($atypes : ident), *) => { ... };
($trait_ : ident assoc $($atypes : ident), * where $($preds : tt) +) => { ... };
(sync $trait_ : ident assoc $($atypes : ident), * where $($preds : tt) +) => { ... };
($trait_ : ident < $($types : ident), * > assoc $($atypes : ident), *) => { ... };
(sync $trait_ : ident < $($types : ident), * > assoc $($atypes : ident), *) => { ... };
($trait_ : ident < $($types : ident), * > assoc $($atypes : ident), * where
$($preds : tt) +) => { ... };
(sync $trait_ : ident < $($types : ident), * > assoc $($atypes : ident), *
where $($preds : tt) +) => { ... };
(concrete $trait_ : ident < $($types : ident), * >) => { ... };
(sync concrete $trait_ : ident < $($types : ident), * >) => { ... };
(concrete $trait_ : ident assoc $($atypes : ident = $aty : ty), *) => { ... };
(sync concrete $trait_ : ident assoc $($atypes : ident = $aty : ty), *) => { ... };
(concrete $trait_ : ident < $($types : ident), * > assoc
$($atypes : ident = $aty : ty), *) => { ... };
(sync concrete $trait_ : ident < $($types : ident), * > assoc
$($atypes : ident = $aty : ty), *) => { ... };
}
Expand description
Adds downcasting support to traits that extend downcast::Downcast
by defining forwarding
methods to the corresponding implementations on std::any::Any
in the standard library.
See https://users.rust-lang.org/t/how-to-create-a-macro-to-impl-a-provided-type-parametrized-trait/5289 for why this is implemented this way to support templatized traits.