#[macro_export]
macro_rules! clap_command {
($state: ty, $clap: ty, async $inc: expr) => {{
async fn func(
state: &mut $state,
args: Vec<String>,
) -> Result<(), Box<dyn ::std::error::Error>> {
let parsed: $clap = match ::clap::Parser::try_parse_from(&args[..])
{
::std::result::Result::Ok(o) => o,
::std::result::Result::Err(e)
if e.kind == ::clap::error::ErrorKind::DisplayHelp =>
{
e.print()?;
return Ok(());
}
::std::result::Result::Err(e) => {
return std::result::Result::Err(e.into())
}
};
$inc(state, parsed).await?;
Ok(())
}
let command = $crate::Command::new_async(
<$clap as ::clap::CommandFactory>::into_app()
.get_about()
.unwrap_or_default()
.to_string(),
$crate::async_fn!($state, func),
);
command
}};
($state: ty, $clap: ty, $inc: expr) => {{
fn func(
state: &mut $state,
args: Vec<String>,
) -> Result<(), Box<dyn ::std::error::Error>> {
let parsed: $clap = match ::clap::Parser::try_parse_from(&args[..])
{
::std::result::Result::Ok(o) => o,
::std::result::Result::Err(e)
if e.kind == ::clap::error::ErrorKind::DisplayHelp =>
{
e.print()?;
return Ok(());
}
::std::result::Result::Err(e) => {
return std::result::Result::Err(e.into())
}
};
$inc(state, parsed)?;
Ok(())
}
let command = $crate::Command::new(
<$clap as ::clap::CommandFactory>::into_app()
.get_about()
.unwrap_or_default()
.to_string(),
func,
);
command
}};
}