1use crate::packet::number::{PacketNumber, PacketNumberRange};
7use core::ops::RangeInclusive;
8
9pub trait Set {
14 fn contains(&self, packet_number: PacketNumber) -> bool;
16
17 fn smallest(&self) -> PacketNumber;
19
20 fn largest(&self) -> PacketNumber;
22
23 fn as_range(&self) -> PacketNumberRange {
25 PacketNumberRange::new(self.smallest(), self.largest())
26 }
27}
28
29impl Set for PacketNumber {
32 fn contains(&self, packet_number: PacketNumber) -> bool {
33 *self == packet_number
34 }
35
36 fn smallest(&self) -> PacketNumber {
37 *self
38 }
39
40 fn largest(&self) -> PacketNumber {
41 *self
42 }
43}
44
45impl Set for RangeInclusive<PacketNumber> {
46 fn contains(&self, packet_number: PacketNumber) -> bool {
47 RangeInclusive::contains(self, &packet_number)
48 }
49
50 fn smallest(&self) -> PacketNumber {
51 *self.start()
52 }
53
54 fn largest(&self) -> PacketNumber {
55 *self.end()
56 }
57}
58
59impl Set for PacketNumberRange {
60 fn contains(&self, packet_number: PacketNumber) -> bool {
61 PacketNumberRange::contains(self, packet_number)
62 }
63
64 fn smallest(&self) -> PacketNumber {
65 self.start()
66 }
67
68 fn largest(&self) -> PacketNumber {
69 self.end()
70 }
71
72 fn as_range(&self) -> PacketNumberRange {
73 *self
74 }
75}