X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=c-bindings-gen%2Fsrc%2Ftypes.rs;h=c96a3b9a2fd51220057d89381c95e77e2f5d11a6;hb=881edcf972ef61892b191a16942f93e76e28f7f6;hp=2ea9221a63f6a6a22a76c01b93e9a0d29ae92db3;hpb=bb42528ce008b76850a44c4b44c52c853ca00b2a;p=ldk-c-bindings diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index 2ea9221..c96a3b9 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -227,12 +227,13 @@ impl<'a, 'p: 'a> GenericTypes<'a, 'p> { non_lifetimes_processed = true; if path != "std::ops::Deref" && path != "core::ops::Deref" { new_typed_generics.insert(&type_param.ident, Some(path)); - } else if trait_bound.path.segments.len() == 1 { + } else { // If we're templated on Deref, store // the reference type in `default_generics` which handles full // types and not just paths. if let syn::PathArguments::AngleBracketed(ref args) = trait_bound.path.segments[0].arguments { + assert_eq!(trait_bound.path.segments.len(), 1); for subargument in args.args.iter() { match subargument { syn::GenericArgument::Lifetime(_) => {}, @@ -283,14 +284,12 @@ impl<'a, 'p: 'a> GenericTypes<'a, 'p> { non_lifetimes_processed = true; assert_simple_bound(&trait_bound); let resolved = types.resolve_path(&trait_bound.path, None); - let ref_ty = syn::Type::Reference(syn::TypeReference { - and_token: syn::Token![&](Span::call_site()), - lifetime: None, mutability: None, - elem: Box::new(syn::Type::Path(syn::TypePath { - qself: None, path: string_path_to_syn_path(&resolved) - })), + let ty = syn::Type::Path(syn::TypePath { + qself: None, path: string_path_to_syn_path(&resolved) }); - self.default_generics.insert(p_ident, (ref_ty.clone(), ref_ty)); + let ref_ty = parse_quote!(&#ty); + self.default_generics.insert(p_ident, (ty, ref_ty)); + *gen = Some(resolved); } }