+ writeln!(w, "#[no_mangle]").unwrap();
+ writeln!(w, "pub(crate) extern \"C\" fn {}_clone_fields(orig: &{}) -> {} {{", trait_name, trait_name, trait_name).unwrap();
+ writeln!(w, "\t{} {{", trait_name).unwrap();
+ writeln!(w, "\t\tthis_arg: orig.this_arg,").unwrap();
+ for (field, clone_fn, _) in generated_fields.iter() {
+ if let Some(f) = clone_fn {
+ // If the field isn't clonable, blindly assume its a trait and hope for the best.
+ writeln!(w, "\t\t{}: {}(&orig.{}),", field, f, field).unwrap();
+ } else {
+ writeln!(w, "\t\t{}: Clone::clone(&orig.{}),", field, field).unwrap();
+ }
+ }
+ writeln!(w, "\t}}\n}}").unwrap();
+