use crate::cfg::{cfg_async, cfg_not_async};
cfg_async! {
macro_rules! cfg_async_or_sync {
[
$(#[$($addmeta:tt)*])*
pub trait $name_trait: ident {
$(#[$doc_hide0:meta])* #only_async {
$($async_code:tt)*
}
$(#[$doc_hide1:meta])* #only_sync {
$($sync_code:tt)*
}
$($code:tt)+
}
] => {
$(#[$($addmeta)*])*
pub trait $name_trait {
$($async_code)*
$($code)+
}
};
[
$(#[$($addmeta:tt)*])*
impl $([$($left:tt)*])? $name_trait: ident for $impl_ty: ty {
$(#[$doc_hide0:meta])* #only_async {
$($async_code:tt)*
}
$(#[$doc_hide1:meta])* #only_sync {
$($sync_code:tt)*
}
$($code:tt)+
}
] => {
$(#[$($addmeta)*])*
impl $(<$($left)*>)? $name_trait for $impl_ty {
$($async_code)*
$($code)+
}
};
}
}
cfg_not_async! {
macro_rules! cfg_async_or_sync {
[
$(#[$($addmeta:tt)*])*
pub trait $name_trait: ident {
$(#[$doc_hide0:meta])* #only_async {
$($async_code:tt)*
}
$(#[$doc_hide1:meta])* #only_sync {
$($sync_code:tt)*
}
$($code:tt)+
}
] => {
$(#[$($addmeta)*])*
pub trait $name_trait {
$($sync_code)*
$($code)+
}
};
[
$(#[$($addmeta:tt)*])*
impl $([$($left:tt)*])? $name_trait: ident for $impl_ty: ty {
$(#[$doc_hide0:meta])* #only_async {
$($async_code:tt)*
}
$(#[$doc_hide1:meta])* #only_sync {
$($sync_code:tt)*
}
$($code:tt)+
}
] => {
$(#[$($addmeta)*])*
impl $(<$($left)*>)? $name_trait for $impl_ty {
$($sync_code)*
$($code)+
}
};
}
}
pub(crate) use cfg_async_or_sync;