Support `Option<Tuple>` with elements in the tuple
[ldk-c-bindings] / c-bindings-gen / src / types.rs
index bc015f04bd8ecf4ec4add92e3e4c76528b2940be..2ebfde3239ed04c6195261343783da07a22fca96 100644 (file)
@@ -705,6 +705,7 @@ impl FullLibraryAST {
                                                        let modname = if module != "" {
                                                                module.clone() + "::" + &modident
                                                        } else {
+                                                               self.dependencies.insert(m.ident);
                                                                modident.clone()
                                                        };
                                                        self.load_module(modname, m.attrs, m.content.unwrap().1);
@@ -1476,12 +1477,18 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
                                }
                                if let Some(t) = single_contained {
                                        if let syn::Type::Tuple(syn::TypeTuple { elems, .. }) = t {
-                                               assert!(elems.is_empty());
                                                let inner_name = self.get_c_mangled_container_type(vec![single_contained.unwrap()], generics, "Option").unwrap();
-                                               return Some(("if ", vec![
-                                                       (format!(".is_none() {{ {}::None }} else {{ {}::Some /*",
-                                                               inner_name, inner_name), format!(""))
-                                                       ], " */}", ContainerPrefixLocation::PerConv));
+                                               if elems.is_empty() {
+                                                       return Some(("if ", vec![
+                                                               (format!(".is_none() {{ {}::None }} else {{ {}::Some /* ",
+                                                                       inner_name, inner_name), format!(""))
+                                                               ], " */ }", ContainerPrefixLocation::PerConv));
+                                               } else {
+                                                       return Some(("if ", vec![
+                                                               (format!(".is_none() {{ {}::None }} else {{ {}::Some(",
+                                                                       inner_name, inner_name), format!("({}.unwrap())", var_access))
+                                                               ], ") }", ContainerPrefixLocation::PerConv));
+                                               }
                                        }
                                        if let syn::Type::Reference(syn::TypeReference { elem, .. }) = t {
                                                if let syn::Type::Slice(_) = &**elem {