Handle type references which refer to a module defined in scope
[ldk-c-bindings] / c-bindings-gen / src / types.rs
index 9df1bd1c1ef309e13aef79f99072c3c265adf128..6a5f3e25eb633945d4e686f89fa0d6926b601ae1 100644 (file)
@@ -679,6 +679,8 @@ impl<'mod_lifetime, 'crate_lft: 'mod_lifetime> ImportResolver<'mod_lifetime, 'cr
                                Some(first_seg_str + &remaining)
                        } else if first_seg_str == "crate" {
                                Some(self.crate_name.to_owned() + &remaining)
+                       } else if self.library.modules.get(&format!("{}::{}", self.module_path, first_seg.ident)).is_some() {
+                               Some(format!("{}::{}{}", self.module_path, first_seg.ident, remaining))
                        } else { None }
                }
        }
@@ -3070,7 +3072,9 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
                                        // If this is a no-export'd crate and there's only one implementation in the
                                        // whole crate, just treat it as a reference to whatever the implementor is.
                                        if with_ref_lifetime {
-                                               write!(w, "&'static crate::{}", trait_impls[0]).unwrap();
+                                               // Hope we're being printed in function generics and let rustc derive the
+                                               // type.
+                                               write!(w, "_").unwrap();
                                        } else {
                                                write!(w, "&crate::{}", trait_impls[0]).unwrap();
                                        }