#[macro_export]
macro_rules! ternary {
($condition:expr => $true:expr; $false:expr) => {
if $condition {
$true
} else {
$false
}
};
($condition:expr => $true:expr, $false:expr) => {
if $condition {
$true
} else {
$false
}
};
}
#[macro_export]
macro_rules! some {
($arg:expr; $err:expr) => {
if let Some(v) = $arg {
v
} else {
$err
}
};
($arg:expr; ret) => {
if let Some(v) = $arg {
v
} else {
return;
}
};
($arg:expr; ret $result:expr) => {
if let Some(v) = $arg {
v
} else {
return $result;
}
};
($arg:expr; con) => {
if let Some(v) = $arg {
v
} else {
continue;
}
};
}
#[macro_export]
macro_rules! result {
($arg:expr; $err:expr) => {
if let Ok(v) = $arg {
v
} else {
$err
}
};
($arg:expr; ret) => {
if let Ok(v) = $arg {
v
} else {
return;
}
};
($arg:expr; ret $result:expr) => {
if let Ok(v) = $arg {
v
} else {
return $result;
}
};
($arg:expr; con) => {
if let Ok(v) = $arg {
v
} else {
continue;
}
};
}
#[macro_export]
macro_rules! catch {
($e:ident -> $stmt:stmt) => {{
let catch = || -> std::result::Result<_, $e> { $stmt };
catch()
}};
($stmt:stmt) => {{
let catch = || -> std::option::Option<_> { $stmt };
catch()
}};
}