@@ -123,6 +123,7 @@ pub struct PredicateFilter<St, K: Resource, P: Predicate<K>> {
123123 stream : St ,
124124 predicate : P ,
125125 cache : HashMap < PredicateCacheKey , u64 > ,
126+ // K: Resource necessary to get .meta() of an object during polling
126127 _phantom : PhantomData < K > ,
127128}
128129impl < St , K , P > PredicateFilter < St , K , P >
@@ -290,10 +291,11 @@ pub(crate) mod tests {
290291 p
291292 } ;
292293
293- // Simulate: create (gen=1, uid=1) -> delete -> create (gen=1, uid=2)
294+ // Simulate: create (gen=1, uid=1) -> delete -> create (gen=1, uid=2) -> delete -> create (gen=2, uid=3)
294295 let data = stream:: iter ( [
295296 Ok ( mkobj ( 1 , "uid-1" ) ) , // First resource created, generation=1
296297 Ok ( mkobj ( 1 , "uid-2" ) ) , // Resource recreated with same generation but different UID
298+ Ok ( mkobj ( 2 , "uid-3" ) ) , // Resource recreated again with new generation and different UID
297299 ] ) ;
298300 let mut rx = pin ! ( PredicateFilter :: new( data, predicates:: generation) ) ;
299301
@@ -308,6 +310,12 @@ pub(crate) mod tests {
308310 assert_eq ! ( second. meta( ) . generation, Some ( 1 ) ) ;
309311 assert_eq ! ( second. meta( ) . uid. as_deref( ) , Some ( "uid-2" ) ) ;
310312
313+ // Third object should also pass through because it's a different resource
314+ // (different UID and generation)
315+ let third = rx. next ( ) . now_or_never ( ) . unwrap ( ) . unwrap ( ) . unwrap ( ) ;
316+ assert_eq ! ( third. meta( ) . generation, Some ( 2 ) ) ;
317+ assert_eq ! ( third. meta( ) . uid. as_deref( ) , Some ( "uid-3" ) ) ;
318+
311319 // Stream should be exhausted
312320 assert ! ( matches!( poll!( rx. next( ) ) , Poll :: Ready ( None ) ) ) ;
313321 }
0 commit comments