mirror of
https://github.com/Start9Labs/rpc-toolkit.git
synced 2026-03-26 02:11:56 +00:00
fix cli
This commit is contained in:
@@ -796,10 +796,6 @@ fn cli_handler(
|
||||
.unwrap_or_else(|| LitStr::new(&name.to_string(), name.span()));
|
||||
let field_name = Ident::new(&format!("arg_{}", name), name.span());
|
||||
let ty = arg.ty.clone();
|
||||
let mut ty = quote! { #ty };
|
||||
if arg.default.is_some() && !arg.optional {
|
||||
ty = quote! { Option<#ty> };
|
||||
}
|
||||
arg_def.push(quote! {
|
||||
#[serde(rename = #rename)]
|
||||
#field_name: #ty,
|
||||
@@ -849,7 +845,7 @@ fn cli_handler(
|
||||
::rpc_toolkit::command_helpers::prelude::default_arg_parser(arg_val, matches)
|
||||
}
|
||||
};
|
||||
if arg.optional || arg.default.is_some() {
|
||||
if arg.optional {
|
||||
quote! {
|
||||
#field_name: if let Some(arg_val) = matches.value_of(#arg_name) {
|
||||
Some(#parse_val?)
|
||||
@@ -857,6 +853,28 @@ fn cli_handler(
|
||||
None
|
||||
},
|
||||
}
|
||||
} else if let Some(default) = &arg.default {
|
||||
if let Some(default) = default {
|
||||
let path: Path = match syn::parse_str(&default.value()) {
|
||||
Ok(a) => a,
|
||||
Err(e) => return e.into_compile_error(),
|
||||
};
|
||||
quote! {
|
||||
#field_name: if let Some(arg_val) = matches.value_of(#arg_name) {
|
||||
#parse_val?
|
||||
} else {
|
||||
#path()
|
||||
},
|
||||
}
|
||||
} else {
|
||||
quote! {
|
||||
#field_name: if let Some(arg_val) = matches.value_of(#arg_name) {
|
||||
#parse_val?
|
||||
} else {
|
||||
Default::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
} else if arg.multiple.is_some() {
|
||||
quote! {
|
||||
#field_name: matches.values_of(#arg_name).iter().flatten().map(|arg_val| #parse_val).collect::<Result<_, _>>()?,
|
||||
|
||||
@@ -42,6 +42,10 @@ impl Context for AppState {
|
||||
}
|
||||
}
|
||||
|
||||
fn test_string() -> String {
|
||||
"test".to_owned()
|
||||
}
|
||||
|
||||
#[command(
|
||||
about = "Does the thing",
|
||||
subcommands("dothething2::<U, E>", self(dothething_impl(async)))
|
||||
@@ -52,7 +56,7 @@ async fn dothething<
|
||||
>(
|
||||
#[context] _ctx: AppState,
|
||||
#[arg(short = 'a')] arg1: Option<String>,
|
||||
#[arg(short = 'b')] val: String,
|
||||
#[arg(short = 'b', default = "test_string")] val: String,
|
||||
#[arg(short = 'c', help = "I am the flag `c`!", default)] arg3: bool,
|
||||
#[arg(stdin)] structured: U,
|
||||
) -> Result<(Option<String>, String, bool, U), RpcError> {
|
||||
@@ -147,8 +151,8 @@ async fn test_rpc() {
|
||||
.arg("--exact")
|
||||
.arg("--nocapture")
|
||||
.arg("--")
|
||||
.arg("-b")
|
||||
.arg("test")
|
||||
// .arg("-b")
|
||||
// .arg("test")
|
||||
.arg("dothething2")
|
||||
.stdin(std::process::Stdio::piped())
|
||||
.stdout(std::process::Stdio::piped())
|
||||
|
||||
Reference in New Issue
Block a user