Don't apply command handler prefix to subcommand modules

This commit is contained in:
dasha_uwu
2026-01-25 04:18:39 +05:00
parent d23f7f7e81
commit 129ca52463

View File

@@ -55,10 +55,13 @@ pub(super) fn command_dispatch(item: ItemEnum, args: &[Meta]) -> Result<TokenStr
fn dispatch_arm(v: &Variant, prefix: &str) -> Result<TokenStream2> {
let name = &v.ident;
let target = camel_to_snake_string(&format!("{name}"));
let target = format!("{prefix}{target}");
let mut target = camel_to_snake_string(&format!("{name}"));
if !matches!(&v.fields, Fields::Unnamed(_)) {
target = format!("{prefix}{target}");
}
let handler = Ident::new(&target, Span::call_site().into());
let res = match &v.fields {
// command with args
| Fields::Named(fields) => {
let field = fields
.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) => {
let Some(ref field) = fields.unnamed.first() else {
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)