Correctly convert Option<Generic<Inner>> to C
authorMatt Corallo <git@bluematt.me>
Tue, 12 Oct 2021 02:09:03 +0000 (02:09 +0000)
committerMatt Corallo <git@bluematt.me>
Sat, 16 Oct 2021 02:30:00 +0000 (02:30 +0000)
c-bindings-gen/src/types.rs

index 9220dd1256ce21d7c5c58a4e45aa1501a05adc2b..f87e2a075e99932d6865be53347fe04fd1a3f628 100644 (file)
@@ -1374,10 +1374,10 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
                                                                ], " }", ContainerPrefixLocation::OutsideConv));
                                                }
                                        } else if self.is_primitive(&inner_path) || self.c_type_from_path(&inner_path, false, false).is_none() {
                                                                ], " }", ContainerPrefixLocation::OutsideConv));
                                                }
                                        } else if self.is_primitive(&inner_path) || self.c_type_from_path(&inner_path, false, false).is_none() {
-                                               let inner_name = inner_path.rsplit("::").next().unwrap();
+                                               let inner_name = self.get_c_mangled_container_type(vec![single_contained.unwrap()], generics, "Option").unwrap();
                                                return Some(("if ", vec![
                                                return Some(("if ", vec![
-                                                       (format!(".is_none() {{ {}::COption_{}Z::None }} else {{ {}::COption_{}Z::Some(",
-                                                               Self::generated_container_path(), inner_name, Self::generated_container_path(), inner_name),
+                                                       (format!(".is_none() {{ {}::None }} else {{ {}::Some(",
+                                                               inner_name, inner_name),
                                                         format!("{}.unwrap()", var_access))
                                                        ], ") }", ContainerPrefixLocation::PerConv));
                                        } else {
                                                         format!("{}.unwrap()", var_access))
                                                        ], ") }", ContainerPrefixLocation::PerConv));
                                        } else {