@@ -34,59 +34,53 @@ impl<'schema> GqlInterface<'schema> {
3434 selection : & ' query Selection < ' query > ,
3535 query_context : & QueryContext ,
3636 ) -> Selection < ' query > {
37- Selection (
38- selection
39- . 0
40- . iter ( )
41- // Only keep what we can handle
42- . filter ( |f| match f {
43- SelectionItem :: Field ( f) => f. name != TYPENAME_FIELD ,
44- SelectionItem :: FragmentSpread ( SelectionFragmentSpread { fragment_name } ) => {
45- // only if the fragment refers to the interface’s own fields (to take into account type-refining fragments)
46- let fragment = query_context
47- . fragments
48- . get ( fragment_name)
49- . ok_or_else ( || format_err ! ( "Unknown fragment: {}" , & fragment_name) )
50- // TODO: fix this
51- . unwrap ( ) ;
37+ ( & selection)
38+ . into_iter ( )
39+ // Only keep what we can handle
40+ . filter ( |f| match f {
41+ SelectionItem :: Field ( f) => f. name != TYPENAME_FIELD ,
42+ SelectionItem :: FragmentSpread ( SelectionFragmentSpread { fragment_name } ) => {
43+ // only if the fragment refers to the interface’s own fields (to take into account type-refining fragments)
44+ let fragment = query_context
45+ . fragments
46+ . get ( fragment_name)
47+ . ok_or_else ( || format_err ! ( "Unknown fragment: {}" , & fragment_name) )
48+ // TODO: fix this
49+ . unwrap ( ) ;
5250
53- fragment. on == self . name
54- }
55- SelectionItem :: InlineFragment ( _) => false ,
56- } )
57- . map ( |a| ( * a) . clone ( ) )
58- . collect ( ) ,
59- )
51+ fragment. on . name ( ) == self . name
52+ }
53+ SelectionItem :: InlineFragment ( _) => false ,
54+ } )
55+ . map ( |a| ( * a) . clone ( ) )
56+ . collect ( )
6057 }
6158
6259 fn union_selection < ' query > (
6360 & self ,
6461 selection : & ' query Selection ,
6562 query_context : & QueryContext ,
6663 ) -> Selection < ' query > {
67- Selection (
68- selection
69- . 0
70- . iter ( )
71- // Only keep what we can handle
72- . filter ( |f| match f {
73- SelectionItem :: InlineFragment ( _) => true ,
74- SelectionItem :: FragmentSpread ( SelectionFragmentSpread { fragment_name } ) => {
75- let fragment = query_context
76- . fragments
77- . get ( fragment_name)
78- . ok_or_else ( || format_err ! ( "Unknown fragment: {}" , & fragment_name) )
79- // TODO: fix this
80- . unwrap ( ) ;
64+ ( & selection)
65+ . into_iter ( )
66+ // Only keep what we can handle
67+ . filter ( |f| match f {
68+ SelectionItem :: InlineFragment ( _) => true ,
69+ SelectionItem :: FragmentSpread ( SelectionFragmentSpread { fragment_name } ) => {
70+ let fragment = query_context
71+ . fragments
72+ . get ( fragment_name)
73+ . ok_or_else ( || format_err ! ( "Unknown fragment: {}" , & fragment_name) )
74+ // TODO: fix this
75+ . unwrap ( ) ;
8176
82- // only the fragments _not_ on the interface
83- fragment. on != self . name
84- }
85- SelectionItem :: Field ( SelectionField { name, .. } ) => * name == "__typename" ,
86- } )
87- . map ( |a| ( * a) . clone ( ) )
88- . collect ( ) ,
89- )
77+ // only the fragments _not_ on the interface
78+ fragment. on . name ( ) != self . name
79+ }
80+ SelectionItem :: Field ( SelectionField { name, .. } ) => * name == "__typename" ,
81+ } )
82+ . map ( |a| ( * a) . clone ( ) )
83+ . collect ( )
9084 }
9185
9286 /// Create an empty interface. This needs to be mutated before it is useful.
@@ -227,13 +221,13 @@ mod tests {
227221 let typename_field = :: selection:: SelectionItem :: Field ( :: selection:: SelectionField {
228222 alias : None ,
229223 name : "__typename" ,
230- fields : Selection ( vec ! [ ] ) ,
224+ fields : Selection :: new_empty ( ) ,
231225 } ) ;
232- let selection = Selection ( vec ! [ typename_field. clone( ) ] ) ;
226+ let selection = Selection :: from_vec ( vec ! [ typename_field. clone( ) ] ) ;
233227
234228 assert_eq ! (
235229 iface. union_selection( & selection, & context) ,
236- Selection ( vec![ typename_field] )
230+ Selection :: from_vec ( vec![ typename_field] )
237231 ) ;
238232 }
239233
@@ -254,13 +248,13 @@ mod tests {
254248 let typename_field = :: selection:: SelectionItem :: Field ( :: selection:: SelectionField {
255249 alias : None ,
256250 name : "__typename" ,
257- fields : Selection ( vec ! [ ] ) ,
251+ fields : Selection :: new_empty ( ) ,
258252 } ) ;
259- let selection = Selection ( vec ! [ typename_field] ) ;
253+ let selection: Selection = vec ! [ typename_field] . into_iter ( ) . collect ( ) ;
260254
261255 assert_eq ! (
262256 iface. object_selection( & selection, & context) ,
263- Selection ( vec! [ ] )
257+ Selection :: new_empty ( )
264258 ) ;
265259 }
266260}
0 commit comments