From 6532fb752b6e6c0bb22c0471099aaa7f9f01f608 Mon Sep 17 00:00:00 2001 From: Dom Dwyer Date: Wed, 22 Feb 2023 14:13:32 +0100 Subject: [PATCH] feat: impl Extend for SequenceNumberSet Allow a SequenceNumberSet to be efficiently extended from any iterator of SequenceNumber instances. --- data_types/src/sequence_number_set.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/data_types/src/sequence_number_set.rs b/data_types/src/sequence_number_set.rs index 306b388fd4..3576ad86ab 100644 --- a/data_types/src/sequence_number_set.rs +++ b/data_types/src/sequence_number_set.rs @@ -73,6 +73,12 @@ impl TryFrom<&[u8]> for SequenceNumberSet { } } +impl Extend for SequenceNumberSet { + fn extend>(&mut self, iter: T) { + self.0.extend(iter.into_iter().map(|v| v.get() as _)) + } +} + #[cfg(test)] mod tests { use super::*; @@ -114,4 +120,22 @@ mod tests { a.remove(SequenceNumber::new(1)); assert_eq!(a.len(), 0); } + + #[test] + fn test_extend() { + let mut a = SequenceNumberSet::default(); + a.add(SequenceNumber::new(42)); + + let extend_set = [SequenceNumber::new(4), SequenceNumber::new(2)]; + + assert!(a.contains(SequenceNumber::new(42))); + assert!(!a.contains(SequenceNumber::new(4))); + assert!(!a.contains(SequenceNumber::new(2))); + + a.extend(extend_set); + + assert!(a.contains(SequenceNumber::new(42))); + assert!(a.contains(SequenceNumber::new(4))); + assert!(a.contains(SequenceNumber::new(2))); + } }