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> { 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)