Include argument info docs on all-pub struct constructors
[ldk-c-bindings] / c-bindings-gen / src / main.rs
index 8876583315246524ffb938df804234b9a2784d86..7c066875a5b6a0198e8dadf2ecdaa7d6e725831e 100644 (file)
@@ -554,8 +554,7 @@ fn writeln_trait<'a, 'b, W: std::io::Write>(w: &mut W, t: &'a syn::ItemTrait, ty
        writeln!(w, "unsafe impl Send for {} {{}}", trait_name).unwrap();
        writeln!(w, "unsafe impl Sync for {} {{}}", trait_name).unwrap();
 
-       writeln!(w, "#[no_mangle]").unwrap();
-       writeln!(w, "pub(crate) extern \"C\" fn {}_clone_fields(orig: &{}) -> {} {{", trait_name, trait_name, trait_name).unwrap();
+       writeln!(w, "pub(crate) 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() {
@@ -813,6 +812,19 @@ fn writeln_struct<'a, 'b, W: std::io::Write>(w: &mut W, s: &'a syn::ItemStruct,
        if all_fields_settable {
                // Build a constructor!
                writeln!(w, "/// Constructs a new {} given each field", struct_name).unwrap();
+               match &s.fields {
+                       syn::Fields::Named(fields) => {
+                               writeln_arg_docs(w, &[], "", types, Some(&gen_types),
+                                       fields.named.iter().map(|field| (format!("{}_arg", field.ident.as_ref().unwrap()), &field.ty)),
+                                       None);
+                       },
+                       syn::Fields::Unnamed(fields) => {
+                               writeln_arg_docs(w, &[], "", types, Some(&gen_types),
+                                       fields.unnamed.iter().enumerate().map(|(idx, field)| (format!("{}_arg", ('a' as u8 + idx as u8)), &field.ty)),
+                                       None);
+                       },
+                       syn::Fields::Unit => {},
+               }
                write!(w, "#[must_use]\n#[no_mangle]\npub extern \"C\" fn {}_new(", struct_name).unwrap();
 
                match &s.fields {