let mut self_path_segs = syn::punctuated::Punctuated::new();
self_path_segs.push(s.ident.clone().into());
let self_path = syn::Path { leading_colon: None, segments: self_path_segs};
- let mut gen_types = GenericTypes::new(Some((types.resolve_path(&self_path, None), &self_path)));
+ let mut gen_types = GenericTypes::new(Some(types.resolve_path(&self_path, None)));
assert!(gen_types.learn_generics(&s.generics, types));
let mut all_fields_settable = true;
if p.qself.is_some() { unimplemented!(); }
if let Some(ident) = single_ident_generic_path_to_ident(&p.path) {
if let Some(resolved_path) = types.maybe_resolve_non_ignored_ident(&ident) {
- let mut gen_types = GenericTypes::new(Some((resolved_path.clone(), &p.path)));
+ let mut gen_types = GenericTypes::new(Some(resolved_path.clone()));
if !gen_types.learn_generics(&i.generics, types) {
eprintln!("Not implementing anything for impl {} due to not understood generics", ident);
return;
syn::Item::Impl(i) => {
if let &syn::Type::Path(ref p) = &*i.self_ty {
if let Some(trait_path) = i.trait_.as_ref() {
- if path_matches_nongeneric(&trait_path.1, &["core", "clone", "Clone"]) {
+ if path_matches_nongeneric(&trait_path.1, &["core", "clone", "Clone"]) ||
+ path_matches_nongeneric(&trait_path.1, &["Clone"]) {
if let Some(full_path) = import_resolver.maybe_resolve_path(&p.path, None) {
crate_types.set_clonable("crate::".to_owned() + &full_path);
}
writeln!(header_file, "#endif").unwrap();
writeln!(cpp_header_file, "#include <string.h>\nnamespace LDK {{").unwrap();
+ // Write a few manually-defined types into the C++ header file
+ write_cpp_wrapper(&mut cpp_header_file, "Str", true, None);
+
// First parse the full crate's ASTs, caching them so that we can hold references to the AST
// objects in other datastructures:
let mut lib_src = String::new();