@@ -735,6 +735,25 @@ fn writeln_struct<'a, 'b, W: std::io::Write>(w: &mut W, s: &'a syn::ItemStruct,
735
735
write!( w, "inner_val" ) . unwrap( ) ;
736
736
types. write_to_c_conversion_inline_suffix( w, & ref_type, Some ( & gen_types) , true ) ;
737
737
writeln!( w, "\n }}" ) . unwrap( ) ;
738
+ } else {
739
+ // If the type isn't reference-able, but is clonable, export a getter that just clones
740
+ if types. understood_c_type( & $field. ty, Some ( & gen_types) ) {
741
+ let mut v = Vec :: new( ) ;
742
+ types. write_c_type( & mut v, & $field. ty, Some ( & gen_types) , true ) ;
743
+ let s = String :: from_utf8( v) . unwrap( ) ;
744
+ if types. is_clonable( & s) {
745
+ writeln_arg_docs( w, & $field. attrs, "" , types, Some ( & gen_types) , vec![ ] . drain( ..) , Some ( & $field. ty) ) ;
746
+ writeln!( w, "///\n /// Returns a copy of the field." ) . unwrap( ) ;
747
+ write!( w, "#[no_mangle]\n pub extern \" C\" fn {}_get_{}(this_ptr: &{}) -> {}" , struct_name, $new_name, struct_name, s) . unwrap( ) ;
748
+ write!( w, " {{\n \t let mut inner_val = this_ptr.get_native_mut_ref().{}.clone();\n \t " , $real_name) . unwrap( ) ;
749
+ let local_var = types. write_to_c_conversion_new_var( w, & format_ident!( "inner_val" ) , & $field. ty, Some ( & gen_types) , true ) ;
750
+ if local_var { write!( w, "\n \t " ) . unwrap( ) ; }
751
+ types. write_to_c_conversion_inline_prefix( w, & $field. ty, Some ( & gen_types) , true ) ;
752
+ write!( w, "inner_val" ) . unwrap( ) ;
753
+ types. write_to_c_conversion_inline_suffix( w, & $field. ty, Some ( & gen_types) , true ) ;
754
+ writeln!( w, "\n }}" ) . unwrap( ) ;
755
+ }
756
+ }
738
757
}
739
758
}
740
759
0 commit comments