@@ -1233,9 +1233,16 @@ fn impl_complex_enum_struct_variant_cls(
1233
1233
complex_enum_variant_field_getter ( & variant_cls_type, field_name, field. span , ctx) ?;
1234
1234
1235
1235
let field_getter_impl = quote ! {
1236
- fn #field_name( slf: #pyo3_path:: PyRef <Self >) -> #pyo3_path:: PyResult <#field_type> {
1236
+ fn #field_name( slf: #pyo3_path:: PyRef <Self >) -> #pyo3_path:: PyResult <#pyo3_path:: PyObject > {
1237
+ #[ allow( unused_imports) ]
1238
+ use #pyo3_path:: impl_:: pyclass:: Probe ;
1239
+ let py = slf. py( ) ;
1237
1240
match & * slf. into_super( ) {
1238
- #enum_name:: #variant_ident { #field_name, .. } => :: std:: result:: Result :: Ok ( :: std:: clone:: Clone :: clone( & #field_name) ) ,
1241
+ #enum_name:: #variant_ident { #field_name, .. } =>
1242
+ #pyo3_path:: impl_:: pyclass:: ConvertField :: <
1243
+ { #pyo3_path:: impl_:: pyclass:: IsIntoPyObjectRef :: <#field_type>:: VALUE } ,
1244
+ { #pyo3_path:: impl_:: pyclass:: IsIntoPyObject :: <#field_type>:: VALUE } ,
1245
+ >:: convert_field:: <#field_type>( #field_name, py) ,
1239
1246
_ => :: core:: unreachable!( "Wrong complex enum variant found in variant wrapper PyClass" ) ,
1240
1247
}
1241
1248
}
@@ -1302,9 +1309,16 @@ fn impl_complex_enum_tuple_variant_field_getters(
1302
1309
} )
1303
1310
. collect ( ) ;
1304
1311
let field_getter_impl: syn:: ImplItemFn = parse_quote ! {
1305
- fn #field_name( slf: #pyo3_path:: PyRef <Self >) -> #pyo3_path:: PyResult <#field_type> {
1312
+ fn #field_name( slf: #pyo3_path:: PyRef <Self >) -> #pyo3_path:: PyResult <#pyo3_path:: PyObject > {
1313
+ #[ allow( unused_imports) ]
1314
+ use #pyo3_path:: impl_:: pyclass:: Probe ;
1315
+ let py = slf. py( ) ;
1306
1316
match & * slf. into_super( ) {
1307
- #enum_name:: #variant_ident ( #( #field_access_tokens) , * ) => :: std:: result:: Result :: Ok ( :: std:: clone:: Clone :: clone( & val) ) ,
1317
+ #enum_name:: #variant_ident ( #( #field_access_tokens) , * ) =>
1318
+ #pyo3_path:: impl_:: pyclass:: ConvertField :: <
1319
+ { #pyo3_path:: impl_:: pyclass:: IsIntoPyObjectRef :: <#field_type>:: VALUE } ,
1320
+ { #pyo3_path:: impl_:: pyclass:: IsIntoPyObject :: <#field_type>:: VALUE } ,
1321
+ >:: convert_field:: <#field_type>( val, py) ,
1308
1322
_ => :: core:: unreachable!( "Wrong complex enum variant found in variant wrapper PyClass" ) ,
1309
1323
}
1310
1324
}
0 commit comments