@@ -314,18 +314,7 @@ fn generate_assignment_tuple(
314314fn generate_return_type ( field_type : & Type , return_type : ReturnType ) -> TokenStream2 {
315315 match return_type {
316316 ReturnType :: Reference => {
317- quote ! { & #field_type }
318- }
319- ReturnType :: Clone | ReturnType :: Copy => {
320- quote ! { #field_type }
321- }
322- ReturnType :: Deref => {
323- if is_option_type ( field_type)
324- || is_result_type ( field_type)
325- || is_arc_type ( field_type)
326- || is_rc_type ( field_type)
327- || is_box_type ( field_type)
328- {
317+ if is_option_type ( field_type) || is_result_type ( field_type) {
329318 if let Type :: Path ( type_path) = field_type {
330319 if let Some ( segment) = type_path. path . segments . last ( ) {
331320 if let PathArguments :: AngleBracketed ( args) = & segment. arguments {
@@ -344,11 +333,19 @@ fn generate_return_type(field_type: &Type, return_type: ReturnType) -> TokenStre
344333 quote ! { #field_type }
345334 }
346335 } else {
347- quote ! { #field_type }
336+ quote ! { & #field_type }
348337 }
349338 }
350- ReturnType :: Default => {
351- if is_option_type ( field_type) || is_result_type ( field_type) {
339+ ReturnType :: Clone | ReturnType :: Copy => {
340+ quote ! { #field_type }
341+ }
342+ ReturnType :: Deref => {
343+ if is_option_type ( field_type)
344+ || is_result_type ( field_type)
345+ || is_arc_type ( field_type)
346+ || is_rc_type ( field_type)
347+ || is_box_type ( field_type)
348+ {
352349 if let Type :: Path ( type_path) = field_type {
353350 if let Some ( segment) = type_path. path . segments . last ( ) {
354351 if let PathArguments :: AngleBracketed ( args) = & segment. arguments {
@@ -367,7 +364,7 @@ fn generate_return_type(field_type: &Type, return_type: ReturnType) -> TokenStre
367364 quote ! { #field_type }
368365 }
369366 } else {
370- quote ! { & #field_type }
367+ quote ! { #field_type }
371368 }
372369 }
373370 }
@@ -400,12 +397,23 @@ fn build_named_get_quote(
400397 }
401398 let return_ty: TokenStream2 = generate_return_type ( attr_ty, return_type) ;
402399 match return_type {
403- ReturnType :: Reference => quote ! {
404- #[ inline( always) ]
405- #vis fn #get_name( & self ) -> #return_ty {
406- & self . #attr_name_ident
400+ ReturnType :: Reference => {
401+ if is_option_type ( attr_ty) || is_result_type ( attr_ty) {
402+ quote ! {
403+ #[ inline( always) ]
404+ #vis fn #get_name( & self ) -> #return_ty {
405+ self . #attr_name_ident. clone( ) . unwrap( )
406+ }
407+ }
408+ } else {
409+ quote ! {
410+ #[ inline( always) ]
411+ #vis fn #get_name( & self ) -> #return_ty {
412+ & self . #attr_name_ident
413+ }
414+ }
407415 }
408- } ,
416+ }
409417 ReturnType :: Clone => quote ! {
410418 #[ inline( always) ]
411419 #vis fn #get_name( & self ) -> #return_ty {
@@ -462,23 +470,6 @@ fn build_named_get_quote(
462470 }
463471 }
464472 }
465- ReturnType :: Default => {
466- if is_option_type ( attr_ty) || is_result_type ( attr_ty) {
467- quote ! {
468- #[ inline( always) ]
469- #vis fn #get_name( & self ) -> #return_ty {
470- self . #attr_name_ident. clone( ) . unwrap( )
471- }
472- }
473- } else {
474- quote ! {
475- #[ inline( always) ]
476- #vis fn #get_name( & self ) -> #return_ty {
477- & self . #attr_name_ident
478- }
479- }
480- }
481- }
482473 }
483474}
484475
@@ -552,12 +543,6 @@ fn build_named_try_get_quote(
552543 quote ! { }
553544 }
554545 }
555- ReturnType :: Default => quote ! {
556- #[ inline( always) ]
557- #vis fn #try_get_name( & self ) -> & #attr_ty {
558- & self . #attr_name_ident
559- }
560- } ,
561546 }
562547}
563548
@@ -804,12 +789,23 @@ fn build_tuple_get_quote(
804789 }
805790 let return_ty: TokenStream2 = generate_return_type ( attr_ty, return_type) ;
806791 match return_type {
807- ReturnType :: Reference => quote ! {
808- #[ inline( always) ]
809- #vis fn #get_name( & self ) -> #return_ty {
810- & self . #field_index
792+ ReturnType :: Reference => {
793+ if is_option_type ( attr_ty) || is_result_type ( attr_ty) {
794+ quote ! {
795+ #[ inline( always) ]
796+ #vis fn #get_name( & self ) -> #return_ty {
797+ self . #field_index. clone( ) . unwrap( )
798+ }
799+ }
800+ } else {
801+ quote ! {
802+ #[ inline( always) ]
803+ #vis fn #get_name( & self ) -> #return_ty {
804+ & self . #field_index
805+ }
806+ }
811807 }
812- } ,
808+ }
813809 ReturnType :: Clone => quote ! {
814810 #[ inline( always) ]
815811 #vis fn #get_name( & self ) -> #return_ty {
@@ -852,23 +848,6 @@ fn build_tuple_get_quote(
852848 }
853849 }
854850 }
855- ReturnType :: Default => {
856- if is_option_type ( attr_ty) || is_result_type ( attr_ty) {
857- quote ! {
858- #[ inline( always) ]
859- #vis fn #get_name( & self ) -> #return_ty {
860- self . #field_index. clone( ) . unwrap( )
861- }
862- }
863- } else {
864- quote ! {
865- #[ inline( always) ]
866- #vis fn #get_name( & self ) -> #return_ty {
867- & self . #field_index
868- }
869- }
870- }
871- }
872851 }
873852}
874853
@@ -942,12 +921,6 @@ fn build_tuple_try_get_quote(
942921 quote ! { }
943922 }
944923 }
945- ReturnType :: Default => quote ! {
946- #[ inline( always) ]
947- #vis fn #try_get_name( & self ) -> & #attr_ty {
948- & self . #field_index
949- }
950- } ,
951924 }
952925}
953926
0 commit comments