Handle type resolution of `crate::thing` without a `use crate`
[ldk-c-bindings] / c-bindings-gen / src / types.rs
index efb12b836e0033284f665b21171b8a0343351fd3..567cc7dbf0e602ee1c29035502c485d1b020af7a 100644 (file)
@@ -517,9 +517,7 @@ impl<'mod_lifetime, 'crate_lft: 'mod_lifetime> ImportResolver<'mod_lifetime, 'cr
                                format!("::{}", seg.ident)
                        }).collect();
                        let first_seg_str = format!("{}", first_seg.ident);
-                       if first_seg_str == "std" {
-                               Some(first_seg_str + &remaining)
-                       } else if let Some((imp, _)) = self.imports.get(&first_seg.ident) {
+                       if let Some((imp, _)) = self.imports.get(&first_seg.ident) {
                                if remaining != "" {
                                        Some(imp.clone() + &remaining)
                                } else {
@@ -527,6 +525,8 @@ impl<'mod_lifetime, 'crate_lft: 'mod_lifetime> ImportResolver<'mod_lifetime, 'cr
                                }
                        } else if let Some(_) = self.priv_modules.get(&first_seg.ident) {
                                Some(format!("{}::{}{}", self.module_path, first_seg.ident, remaining))
+                       } else if first_seg_str == "std" || self.dependencies.contains(&first_seg.ident) {
+                               Some(first_seg_str + &remaining)
                        } else { None }
                }
        }
@@ -1159,7 +1159,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
                                Some(("Vec::new(); for mut item in ", vec![(format!(".drain(..) {{ local_{}.push(", var_name), "item".to_string())], "); }", ContainerPrefixLocation::PerConv))
                        },
                        "Slice" => {
-                               Some(("Vec::new(); for item in ", vec![(format!(".iter() {{ local_{}.push(", var_name), "**item".to_string())], "); }", ContainerPrefixLocation::PerConv))
+                               Some(("Vec::new(); for item in ", vec![(format!(".iter() {{ local_{}.push(", var_name), "*item".to_string())], "); }", ContainerPrefixLocation::PerConv))
                        },
                        "Option" => {
                                if let Some(syn::Type::Path(p)) = single_contained {
@@ -1458,7 +1458,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
                                split.next().unwrap();
                                let tail_str = split.next().unwrap();
                                assert!(split.next().is_none());
-                               let len = &tail_str[..tail_str.len() - 1];
+                               let len = usize::from_str_radix(&tail_str[..tail_str.len() - 1], 10).unwrap();
                                Some(parse_quote!([u8; #len]))
                        } else { None }
                } else { None }