From db6e64c815e0b7d0b6970bbe12ddf6b7c86734a4 Mon Sep 17 00:00:00 2001 From: vic1707 <28602203+vic1707@users.noreply.github.com> Date: Tue, 18 Feb 2025 23:35:36 +0100 Subject: [PATCH] add support for global `SelectValue` name --- embedded-menu-macros/src/selectable.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/embedded-menu-macros/src/selectable.rs b/embedded-menu-macros/src/selectable.rs index 23317e1..b9d56cd 100644 --- a/embedded-menu-macros/src/selectable.rs +++ b/embedded-menu-macros/src/selectable.rs @@ -25,7 +25,7 @@ pub fn expand_next_fn(input: &DataEnum) -> syn::Result { }) } -pub fn expand_name_fn(input: &DataEnum) -> syn::Result { +pub fn expand_name_fn(input: &DataEnum, top_level_name: &Option) -> syn::Result { let variants = input .variants .iter() @@ -45,7 +45,7 @@ pub fn expand_name_fn(input: &DataEnum) -> syn::Result { } let path = &v.ident; - let name_str = manual_name.unwrap_or_else(|| v.ident.to_string()); + let name_str = manual_name.or(top_level_name.clone()).unwrap_or_else(|| v.ident.to_string()); Ok(quote! { Self::#path => #name_str @@ -64,11 +64,20 @@ pub fn expand_select_value(input: DeriveInput) -> syn::Result { let Data::Enum(data) = &input.data else { unimplemented!("SelectValue can only be derived on enums"); }; + let top_level_manual_name = match input + .attrs + .iter() + .find(|attr| attr.meta.path().is_ident("display_as")) + .map(syn::Attribute::parse_args::) { + None => None, + Some(Ok(top_level_name)) => Some(top_level_name.value()), + Some(Err(err)) => return Err(err), + }; let enum_name = input.ident; let next_body = expand_next_fn(data)?; - let name_body = expand_name_fn(data)?; + let name_body = expand_name_fn(data, &top_level_manual_name)?; Ok(quote! { impl embedded_menu::items::menu_item::SelectValue for #enum_name {