diff --git a/rpc-toolkit-macro-internals/src/command/mod.rs b/rpc-toolkit-macro-internals/src/command/mod.rs index 84d5cfa..39dcf91 100644 --- a/rpc-toolkit-macro-internals/src/command/mod.rs +++ b/rpc-toolkit-macro-internals/src/command/mod.rs @@ -74,6 +74,7 @@ pub struct ArgOptions { check_is_present: bool, help: Option, name: Option, + rename: Option, short: Option, long: Option, parse: Option, diff --git a/rpc-toolkit-macro-internals/src/command/parse.rs b/rpc-toolkit-macro-internals/src/command/parse.rs index 9f2083a..d0878a9 100644 --- a/rpc-toolkit-macro-internals/src/command/parse.rs +++ b/rpc-toolkit-macro-internals/src/command/parse.rs @@ -352,6 +352,7 @@ pub fn parse_arg_attr(attr: Attribute, arg: PatType) -> Result { Pat::Ident(i) => Some(i.ident), _ => None, }, + rename: None, short: None, long: None, parse: None, @@ -512,13 +513,13 @@ pub fn parse_arg_attr(attr: Attribute, arg: PatType) -> Result { } NestedMeta::Meta(Meta::NameValue(nv)) if nv.path.is_ident("rename") => { if let Lit::Str(rename) = nv.lit { - if opt.name.is_some() { + if opt.rename.is_some() { return Err(Error::new( rename.span(), "duplicate argument `rename`", )); } - opt.name = Some( + opt.rename = Some( syn::parse_str(&rename.value()) .map_err(|e| Error::new(rename.span(), format!("{}", e)))?, ); @@ -600,6 +601,7 @@ pub fn parse_arg_attr(attr: Attribute, arg: PatType) -> Result { Meta::Path(_) => (), Meta::NameValue(nv) => return Err(Error::new(nv.span(), "`arg` cannot be assigned to")), } + opt.name = opt.name.or(opt.rename.clone()); if opt.name.is_none() { return Err(Error::new( arg_span,