11use std:: collections:: HashSet ;
22
3- use PathArguments :: AngleBracketed ;
43use proc_macro2:: TokenStream ;
54use quote:: { quote, quote_spanned, ToTokens } ;
6- use syn:: { AngleBracketedGenericArguments , Binding , GenericArgument , ImplItem , ItemImpl , Path , PathArguments } ;
75use syn:: punctuated:: Punctuated ;
86use syn:: spanned:: Spanned ;
97use syn:: Token ;
8+ use syn:: {
9+ AngleBracketedGenericArguments , Binding , GenericArgument , ImplItem , ItemImpl , Path ,
10+ PathArguments ,
11+ } ;
12+ use PathArguments :: AngleBracketed ;
1013
1114use crate :: args:: Flag ;
1215use crate :: gen_caster:: generate_caster;
@@ -19,7 +22,6 @@ pub fn process(flags: &HashSet<Flag>, input: ItemImpl) -> TokenStream {
1922 ..
2023 } = input;
2124
22-
2325 let generated = match trait_ {
2426 None => quote_spanned ! {
2527 self_ty. span( ) => compile_error!( "#[cast_to] should only be on an impl of a trait" ) ;
@@ -42,16 +44,20 @@ pub fn process(flags: &HashSet<Flag>, input: ItemImpl) -> TokenStream {
4244}
4345
4446fn fully_bound_trait ( path : & Path , items : & Vec < ImplItem > ) -> impl ToTokens {
45- let bindings = items. iter ( )
46- . filter_map ( |item| if let ImplItem :: Type ( assoc_ty) = item {
47- Some ( GenericArgument :: Binding ( Binding {
48- ident : assoc_ty. ident . to_owned ( ) ,
49- eq_token : Default :: default ( ) ,
50- ty : assoc_ty. ty . to_owned ( ) ,
51- } ) )
52- } else {
53- None
54- } ) . collect :: < Punctuated :: < _ , Token ! [ , ] > > ( ) ;
47+ let bindings = items
48+ . iter ( )
49+ . filter_map ( |item| {
50+ if let ImplItem :: Type ( assoc_ty) = item {
51+ Some ( GenericArgument :: Binding ( Binding {
52+ ident : assoc_ty. ident . to_owned ( ) ,
53+ eq_token : Default :: default ( ) ,
54+ ty : assoc_ty. ty . to_owned ( ) ,
55+ } ) )
56+ } else {
57+ None
58+ }
59+ } )
60+ . collect :: < Punctuated < _ , Token ! [ , ] > > ( ) ;
5561
5662 let mut path = path. clone ( ) ;
5763
@@ -61,16 +67,17 @@ fn fully_bound_trait(path: &Path, items: &Vec<ImplItem>) -> impl ToTokens {
6167
6268 if let Some ( last) = path. segments . last_mut ( ) {
6369 match & mut last. arguments {
64- PathArguments :: None => last. arguments = AngleBracketed ( AngleBracketedGenericArguments {
65- colon2_token : None ,
66- lt_token : Default :: default ( ) ,
67- args : bindings,
68- gt_token : Default :: default ( ) ,
69- } ) ,
70+ PathArguments :: None => {
71+ last. arguments = AngleBracketed ( AngleBracketedGenericArguments {
72+ colon2_token : None ,
73+ lt_token : Default :: default ( ) ,
74+ args : bindings,
75+ gt_token : Default :: default ( ) ,
76+ } )
77+ }
7078 AngleBracketed ( args) => args. args . extend ( bindings) ,
7179 _ => { }
7280 }
7381 }
7482 path
7583}
76-
0 commit comments