#[cfg(feature = "proc-macro")]
mod proc_macro;
#[cfg(feature = "proc-macro")]
pub use proc_macro::*;
#[macro_export]
macro_rules! macro_data_transfer {
(
@normal,
$target:path,
($accu:tt, $($accu_tail:tt,)*),
(($($arg:tt)*) $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
((), $accu, $($accu_tail,)*),
($($arg)* @close_param $($arg_tail)*),
);
};
(
@normal,
$target:path,
(($($accu:tt)*), ($($accu_prev:tt)*), $($accu_tail:tt,)*),
(@close_param $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
(($($accu_prev)* ($($accu)*)), $($accu_tail,)*),
($($arg_tail)*),
);
};
(
@normal,
$target:path,
($accu:tt, $($accu_tail:tt,)*),
([$($arg:tt)*] $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
((), $accu, $($accu_tail,)*),
($($arg)* @close_bracket $($arg_tail)*),
);
};
(
@normal,
$target:path,
(($($accu:tt)*), ($($accu_prev:tt)*), $($accu_tail:tt,)*),
(@close_bracket $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
(($($accu_prev)* [$($accu)*]), $($accu_tail,)*),
($($arg_tail)*),
);
};
(
@normal,
$target:path,
($accu:tt, $($accu_tail:tt,)*),
({$($arg:tt)*} $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
((), $accu, $($accu_tail,)*),
($($arg)* @close_braces $($arg_tail)*),
);
};
(
@normal,
$target:path,
(($($accu:tt)*), ($($accu_prev:tt)*), $($accu_tail:tt,)*),
(@close_braces $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
(($($accu_prev)* {$($accu)*}), $($accu_tail,)*),
($($arg_tail)*),
);
};
(
@normal,
$target:path,
$accu:tt,
(@load ($data:path) $($arg_tail:tt)*),
) => {
$data!(
$crate::macro_data_transfer,
(
@ret,
$target,
$accu,
($($arg_tail)*),
),
);
};
(
(
@ret,
$target:path,
(($($accu:tt)*), $($accu_tail:tt,)*),
$arg_tail:tt,
),
($($value:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
(($($accu)* $($value)*), $($accu_tail,)*),
$arg_tail,
);
};
(
@normal,
$target:path,
(($($accu:tt)*), $($accu_tail:tt,)*),
($arg:tt $($arg_tail:tt)*),
) => {
$crate::macro_data_transfer!(
@normal,
$target,
(($($accu)* $arg), $($accu_tail,)*),
($($arg_tail)*),
);
};
(
@normal,
$target:path,
($accu:tt,),
(),
) => {
$target! $accu;
};
(
$target:path,
$arg:tt,
) => {
$crate::macro_data_transfer!(
@normal,
$target,
((),),
$arg,
);
};
}