Skip to content

Commit c0923bf

Browse files
committed
Support Option<Tuple> with elements in the tuple
1 parent 5768b0e commit c0923bf

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

c-bindings-gen/src/types.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,12 +1477,18 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
14771477
}
14781478
if let Some(t) = single_contained {
14791479
if let syn::Type::Tuple(syn::TypeTuple { elems, .. }) = t {
1480-
assert!(elems.is_empty());
14811480
let inner_name = self.get_c_mangled_container_type(vec![single_contained.unwrap()], generics, "Option").unwrap();
1482-
return Some(("if ", vec![
1483-
(format!(".is_none() {{ {}::None }} else {{ {}::Some /*",
1484-
inner_name, inner_name), format!(""))
1485-
], " */}", ContainerPrefixLocation::PerConv));
1481+
if elems.is_empty() {
1482+
return Some(("if ", vec![
1483+
(format!(".is_none() {{ {}::None }} else {{ {}::Some /* ",
1484+
inner_name, inner_name), format!(""))
1485+
], " */ }", ContainerPrefixLocation::PerConv));
1486+
} else {
1487+
return Some(("if ", vec![
1488+
(format!(".is_none() {{ {}::None }} else {{ {}::Some(",
1489+
inner_name, inner_name), format!("({}.unwrap())", var_access))
1490+
], ") }", ContainerPrefixLocation::PerConv));
1491+
}
14861492
}
14871493
if let syn::Type::Reference(syn::TypeReference { elem, .. }) = t {
14881494
if let syn::Type::Slice(_) = &**elem {

0 commit comments

Comments
 (0)