mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
38 lines
1,021 B
Rust
38 lines
1,021 B
Rust
#[macro_export]
|
|
macro_rules! spark {
|
|
(mgr: $name:ident, $body:expr) => {
|
|
paste::paste! {
|
|
$crate::spark::Spark::[<$name:camel>]($body)
|
|
}
|
|
};
|
|
($layer:ident : $name:ident, $body:expr) => {
|
|
$crate::spark::Spark::Void(yazi_parser::VoidOpt)
|
|
// paste::paste! {
|
|
// $crate::body::Body::[<Key $layer:camel $name:camel>]($body)
|
|
// }
|
|
};
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! try_from_spark {
|
|
($opt:ty, $($($layer:ident)? : $name:ident),+) => {
|
|
impl<'a> std::convert::TryFrom<$crate::spark::Spark<'a>> for paste::paste! { yazi_parser::$opt } {
|
|
type Error = ();
|
|
|
|
fn try_from(value: $crate::spark::Spark<'a>) -> Result<Self, Self::Error> {
|
|
$(
|
|
try_from_spark!(@if $($layer)? : $name, value);
|
|
)+
|
|
Err(())
|
|
}
|
|
}
|
|
};
|
|
(@if mgr : $name:ident, $value:ident) => {
|
|
try_from_spark!(@if : $name, $value);
|
|
};
|
|
(@if $($layer:ident)? : $name:ident, $value:ident) => {
|
|
if let paste::paste! { $crate::spark::Spark::[<$($layer:camel)* $name:camel>](opt) } = $value {
|
|
return Ok(<_>::from(opt))
|
|
}
|
|
};
|
|
}
|