Don't apply command handler prefix to subcommand modules
This commit is contained in:
@@ -55,10 +55,13 @@ pub(super) fn command_dispatch(item: ItemEnum, args: &[Meta]) -> Result<TokenStr
|
|||||||
|
|
||||||
fn dispatch_arm(v: &Variant, prefix: &str) -> Result<TokenStream2> {
|
fn dispatch_arm(v: &Variant, prefix: &str) -> Result<TokenStream2> {
|
||||||
let name = &v.ident;
|
let name = &v.ident;
|
||||||
let target = camel_to_snake_string(&format!("{name}"));
|
let mut target = camel_to_snake_string(&format!("{name}"));
|
||||||
let target = format!("{prefix}{target}");
|
if !matches!(&v.fields, Fields::Unnamed(_)) {
|
||||||
|
target = format!("{prefix}{target}");
|
||||||
|
}
|
||||||
let handler = Ident::new(&target, Span::call_site().into());
|
let handler = Ident::new(&target, Span::call_site().into());
|
||||||
let res = match &v.fields {
|
let res = match &v.fields {
|
||||||
|
// command with args
|
||||||
| Fields::Named(fields) => {
|
| Fields::Named(fields) => {
|
||||||
let field = fields
|
let field = fields
|
||||||
.named
|
.named
|
||||||
@@ -72,6 +75,15 @@ fn dispatch_arm(v: &Variant, prefix: &str) -> Result<TokenStream2> {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// command without args
|
||||||
|
| Fields::Unit => {
|
||||||
|
quote! {
|
||||||
|
#name => {
|
||||||
|
Box::pin(context.#handler()).await
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// subcommand
|
||||||
| Fields::Unnamed(fields) => {
|
| Fields::Unnamed(fields) => {
|
||||||
let Some(ref field) = fields.unnamed.first() else {
|
let Some(ref field) = fields.unnamed.first() else {
|
||||||
return Err(Error::new(Span::call_site().into(), "One unnamed field required"));
|
return Err(Error::new(Span::call_site().into(), "One unnamed field required"));
|
||||||
@@ -83,13 +95,6 @@ fn dispatch_arm(v: &Variant, prefix: &str) -> Result<TokenStream2> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
| Fields::Unit => {
|
|
||||||
quote! {
|
|
||||||
#name => {
|
|
||||||
Box::pin(context.#handler()).await
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
|
|||||||
Reference in New Issue
Block a user