@@ -548,25 +548,28 @@ where
548548 Item : ItemLike + ToTokens + GetIdent ,
549549{
550550 fn gen_impl_item ( & self , args : ImplItemArgs < ' _ , Item > ) -> Result < ( ) > {
551- let func = args
552- . item
553- . function_or_method ( )
554- . map_err ( |_| self . new_syn_error ( args. item . span ( ) , "can only be on a method" ) ) ?;
555- let ident = & func. sig ( ) . ident ;
551+ let ( ident, span) = if let Ok ( c) = args. item . constant ( ) {
552+ ( c. ident ( ) , c. span ( ) )
553+ } else if let Ok ( f) = args. item . function_or_method ( ) {
554+ ( & f. sig ( ) . ident , f. span ( ) )
555+ } else {
556+ return Err ( self . new_syn_error ( args. item . span ( ) , "can only be on a method" ) ) ;
557+ } ;
556558
557559 let item_attr = args. attrs . remove ( self . index ( ) ) ;
558560 let item_meta = SlotItemMeta :: from_attr ( ident. clone ( ) , & item_attr) ?;
559561
560562 let slot_ident = item_meta. slot_name ( ) ?;
563+ let slot_ident = Ident :: new ( & slot_ident. to_string ( ) . to_lowercase ( ) , slot_ident. span ( ) ) ;
561564 let slot_name = slot_ident. to_string ( ) ;
562565 let tokens = {
563566 const NON_ATOMIC_SLOTS : & [ & str ] = & [ "as_buffer" ] ;
564567 if NON_ATOMIC_SLOTS . contains ( & slot_name. as_str ( ) ) {
565- quote_spanned ! { func . span( ) =>
568+ quote_spanned ! { span =>
566569 slots. #slot_ident = Some ( Self :: #ident as _) ;
567570 }
568571 } else {
569- quote_spanned ! { func . span( ) =>
572+ quote_spanned ! { span =>
570573 slots. #slot_ident. store( Some ( Self :: #ident as _) ) ;
571574 }
572575 }
@@ -599,11 +602,11 @@ where
599602 Ok ( py_name)
600603 } ;
601604 let ( ident, py_name, tokens) =
602- if args. item . function_or_method ( ) . is_ok ( ) || args. item . is_const ( ) {
605+ if args. item . function_or_method ( ) . is_ok ( ) || args. item . constant ( ) . is_ok ( ) {
603606 let ident = args. item . get_ident ( ) . unwrap ( ) ;
604607 let py_name = get_py_name ( & attr, ident) ?;
605608
606- let value = if args. item . is_const ( ) {
609+ let value = if args. item . constant ( ) . is_ok ( ) {
607610 // TODO: ctx.new_value
608611 quote_spanned ! ( ident. span( ) => ctx. new_int( Self :: #ident) . into( ) )
609612 } else {
0 commit comments