@@ -433,12 +433,10 @@ fn generate_conversion(fields: FieldsNamed) -> Result<proc_macro2::TokenStream,
433433 ) ]
434434 } ) ?;
435435
436- let name_str = format ! ( "{name}" ) ;
437436 field_list. push ( name. clone ( ) ) ;
438437
439- let error_str = format ! ( "cannot get property {name_str} of value" ) ;
440-
441438 let mut from_js_with = None ;
439+ let mut field_name = format ! ( "{name}" ) ;
442440 if let Some ( attr) = field
443441 . attrs
444442 . into_iter ( )
@@ -449,6 +447,10 @@ fn generate_conversion(fields: FieldsNamed) -> Result<proc_macro2::TokenStream,
449447 let value = meta. value ( ) ?;
450448 from_js_with = Some ( value. parse :: < LitStr > ( ) ?) ;
451449 Ok ( ( ) )
450+ } else if meta. path . is_ident ( "rename" ) {
451+ let value = meta. value ( ) ?;
452+ field_name = value. parse :: < LitStr > ( ) ?. value ( ) ;
453+ Ok ( ( ) )
452454 } else {
453455 Err ( meta. error (
454456 "invalid syntax in the `#[boa()]` attribute. \
@@ -460,8 +462,9 @@ fn generate_conversion(fields: FieldsNamed) -> Result<proc_macro2::TokenStream,
460462 . map_err ( |err| vec ! [ err] ) ?;
461463 }
462464
465+ let error_str = format ! ( "cannot get property {name} of value" ) ;
463466 final_fields. push ( quote ! {
464- let #name = match props. get( & :: boa_engine:: js_string!( #name_str ) . into( ) ) {
467+ let #name = match props. get( & :: boa_engine:: js_string!( #field_name ) . into( ) ) {
465468 Some ( pd) => pd. value( ) . ok_or_else( || :: boa_engine:: JsError :: from(
466469 :: boa_engine:: JsNativeError :: typ( ) . with_message( #error_str)
467470 ) ) ?. clone( ) . try_js_into( context) ?,
0 commit comments