@@ -118,21 +118,21 @@ fn find_all_in_data(data: &[u8], markers: &mut HashSet<Marker>) {
118118///
119119/// # Returns
120120///
121- /// Filtered entries with only used types/events remaining.
121+ /// Iterator of filtered entries with only used types/events remaining.
122122#[ allow( clippy:: implicit_hasher) ]
123- pub fn filter ( entries : Vec < ScSpecEntry > , markers : & HashSet < Marker > ) -> Vec < ScSpecEntry > {
124- entries
125- . into_iter ( )
126- . filter ( |entry| {
127- // Always keep functions - they're the contract's API
128- if matches ! ( entry , ScSpecEntry :: FunctionV0 ( _ ) ) {
129- return true ;
130- }
131- // For all other entries (types, events), check if marker exists
132- let marker = generate_marker_for_entry ( entry ) ;
133- markers . contains ( & marker )
134- } )
135- . collect ( )
123+ pub fn filter < ' a , I : IntoIterator < Item = ScSpecEntry > + ' a > (
124+ entries : I ,
125+ markers : & ' a HashSet < Marker > ,
126+ ) -> impl Iterator < Item = ScSpecEntry > + ' a {
127+ entries . into_iter ( ) . filter ( move |entry| {
128+ // Always keep functions - they're the contract's API
129+ if matches ! ( entry , ScSpecEntry :: FunctionV0 ( _ ) ) {
130+ return true ;
131+ }
132+ // For all other entries (types, events), check if marker exists
133+ let marker = generate_marker_for_entry ( entry ) ;
134+ markers . contains ( & marker )
135+ } )
136136}
137137
138138#[ cfg( test) ]
@@ -324,7 +324,7 @@ mod tests {
324324 markers. insert ( generate_marker_for_entry ( & transfer_event) ) ;
325325 markers. insert ( generate_marker_for_entry ( & mint_event) ) ;
326326
327- let filtered = filter ( entries, & markers) ;
327+ let filtered: Vec < _ > = filter ( entries, & markers) . collect ( ) ;
328328
329329 // Should have: 1 function + 2 used events
330330 assert_eq ! ( filtered. len( ) , 3 ) ;
@@ -355,7 +355,7 @@ mod tests {
355355
356356 let markers = HashSet :: new ( ) ;
357357
358- let filtered = filter ( entries, & markers) ;
358+ let filtered: Vec < _ > = filter ( entries, & markers) . collect ( ) ;
359359
360360 // Should have: 1 function, 0 events
361361 assert_eq ! ( filtered. len( ) , 1 ) ;
@@ -373,7 +373,7 @@ mod tests {
373373
374374 let markers = HashSet :: new ( ) ; // No markers
375375
376- let filtered = filter ( entries, & markers) ;
376+ let filtered: Vec < _ > = filter ( entries, & markers) . collect ( ) ;
377377
378378 // Should have: only functions (always kept), no types or events
379379 assert_eq ! ( filtered. len( ) , 1 ) ;
@@ -403,7 +403,7 @@ mod tests {
403403 markers. insert ( generate_marker_for_entry ( & used_enum) ) ;
404404 markers. insert ( generate_marker_for_entry ( & used_event) ) ;
405405
406- let filtered = filter ( entries, & markers) ;
406+ let filtered: Vec < _ > = filter ( entries, & markers) . collect ( ) ;
407407
408408 // Should have: 1 function + 1 struct + 1 enum + 1 event
409409 assert_eq ! ( filtered. len( ) , 4 ) ;
0 commit comments