#[macro_export]
macro_rules! delegate_disposal {
(
$(#[$meta:meta])*
$name:ident<$($generic:tt),+ $(,)?>,
$inner:ty $(,)?
where $($where_clause:tt)+
) => {
$crate::delegate_disposal! {
@impl
[$(#[$meta])*]
[$name]
[$($generic),+]
[$inner]
[where $($where_clause)+]
[, $($where_clause)+]
}
};
(
$(#[$meta:meta])*
$name:ident<$($generic:tt),+ $(,)?>,
$inner:ty
$(,)?
) => {
$crate::delegate_disposal! {
@impl
[$(#[$meta])*]
[$name]
[$($generic),+]
[$inner]
[]
[]
}
};
(
@impl
[$($meta:tt)*]
[$name:ident]
[$($generic:tt),+]
[$inner:ty]
[$($struct_where:tt)*]
[$($where_clause:tt)*]
) => {
$($meta)*
pub struct $name<$($generic),+>($inner) $($struct_where)*;
impl<$($generic),+> $crate::disposable::Disposable for $name<$($generic),+>
where
$inner: $crate::disposable::Disposable
$($where_clause)*
{
fn dispose(self) {
self.0.dispose();
}
}
impl<$($generic),+> From<$inner>
for $name<$($generic),+>
$($struct_where)*
{
fn from(value: $inner) -> Self {
Self(value)
}
}
};
}