router: deduplicate some code
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
ca3b25869c
commit
61d6541ce2
@ -60,66 +60,31 @@ async fn handle_simple_command_future(
|
|||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let params = parse_arguments(prefix, cli_cmd, args)?;
|
let params = parse_arguments(prefix, cli_cmd, args)?;
|
||||||
|
|
||||||
match cli_cmd.info.handler {
|
let result = match cli_cmd.info.handler {
|
||||||
ApiHandler::Sync(handler) => match (handler)(params, cli_cmd.info, &mut rpcenv) {
|
ApiHandler::Sync(handler) => (handler)(params, cli_cmd.info, &mut rpcenv),
|
||||||
Ok(value) => {
|
ApiHandler::StreamingSync(handler) => (handler)(params, cli_cmd.info, &mut rpcenv)
|
||||||
if value != Value::Null {
|
.and_then(|r| r.to_value().map_err(Error::from)),
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
ApiHandler::Async(handler) => (handler)(params, cli_cmd.info, &mut rpcenv).await,
|
||||||
}
|
ApiHandler::StreamingAsync(handler) => (handler)(params, cli_cmd.info, &mut rpcenv)
|
||||||
}
|
.await
|
||||||
Err(err) => {
|
.and_then(|r| r.to_value().map_err(Error::from)),
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ApiHandler::StreamingSync(handler) => match (handler)(params, cli_cmd.info, &mut rpcenv) {
|
|
||||||
Ok(value) => {
|
|
||||||
let value = value.to_value()?;
|
|
||||||
if value != Value::Null {
|
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ApiHandler::Async(handler) => {
|
|
||||||
let future = (handler)(params, cli_cmd.info, &mut rpcenv);
|
|
||||||
|
|
||||||
match future.await {
|
|
||||||
Ok(value) => {
|
|
||||||
if value != Value::Null {
|
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ApiHandler::StreamingAsync(handler) => {
|
|
||||||
let future = (handler)(params, cli_cmd.info, &mut rpcenv);
|
|
||||||
|
|
||||||
match future.await {
|
|
||||||
Ok(value) => {
|
|
||||||
let value = value.to_value()?;
|
|
||||||
if value != Value::Null {
|
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ApiHandler::AsyncHttp(_) => {
|
ApiHandler::AsyncHttp(_) => {
|
||||||
let err_msg = "CliHandler does not support ApiHandler::AsyncHttp - internal error";
|
let err_msg = "CliHandler does not support ApiHandler::AsyncHttp - internal error";
|
||||||
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
||||||
return Err(format_err!("{}", err_msg));
|
return Err(format_err!("{}", err_msg));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(value) => {
|
||||||
|
if value != Value::Null {
|
||||||
|
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("Error: {}", err);
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -134,50 +99,21 @@ fn handle_simple_command(
|
|||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let params = parse_arguments(prefix, cli_cmd, args)?;
|
let params = parse_arguments(prefix, cli_cmd, args)?;
|
||||||
|
|
||||||
match cli_cmd.info.handler {
|
let result = match cli_cmd.info.handler {
|
||||||
ApiHandler::Sync(handler) => match (handler)(params, cli_cmd.info, &mut rpcenv) {
|
ApiHandler::Sync(handler) => (handler)(params, cli_cmd.info, &mut rpcenv),
|
||||||
Ok(value) => {
|
ApiHandler::StreamingSync(handler) => (handler)(params, cli_cmd.info, &mut rpcenv)
|
||||||
if value != Value::Null {
|
.and_then(|r| r.to_value().map_err(Error::from)),
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
ApiHandler::Async(handler) => match run {
|
||||||
}
|
Some(run) => {
|
||||||
|
let future = (handler)(params, cli_cmd.info, &mut rpcenv);
|
||||||
|
(run)(future)
|
||||||
}
|
}
|
||||||
Err(err) => {
|
None => {
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ApiHandler::StreamingSync(handler) => match (handler)(params, cli_cmd.info, &mut rpcenv) {
|
|
||||||
Ok(value) => {
|
|
||||||
let value = value.to_value()?;
|
|
||||||
if value != Value::Null {
|
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ApiHandler::Async(handler) => {
|
|
||||||
let future = (handler)(params, cli_cmd.info, &mut rpcenv);
|
|
||||||
if let Some(run) = run {
|
|
||||||
match (run)(future) {
|
|
||||||
Ok(value) => {
|
|
||||||
if value != Value::Null {
|
|
||||||
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("Error: {}", err);
|
|
||||||
return Err(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let err_msg = "CliHandler does not support ApiHandler::Async - internal error";
|
let err_msg = "CliHandler does not support ApiHandler::Async - internal error";
|
||||||
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
||||||
return Err(format_err!("{}", err_msg));
|
return Err(format_err!("{}", err_msg));
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
ApiHandler::StreamingAsync(_handler) => {
|
ApiHandler::StreamingAsync(_handler) => {
|
||||||
let err_msg = "CliHandler does not support ApiHandler::StreamingAsync - internal error";
|
let err_msg = "CliHandler does not support ApiHandler::StreamingAsync - internal error";
|
||||||
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
||||||
@ -188,6 +124,18 @@ fn handle_simple_command(
|
|||||||
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
print_simple_usage_error(prefix, cli_cmd, err_msg);
|
||||||
return Err(format_err!("{}", err_msg));
|
return Err(format_err!("{}", err_msg));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(value) => {
|
||||||
|
if value != Value::Null {
|
||||||
|
println!("Result: {}", serde_json::to_string_pretty(&value).unwrap());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("Error: {}", err);
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user