Skip to main content

allen_intervals/interval/
interval_full.rs

1use core::ops::RangeFull;
2
3use crate::{
4    Contains, Equals, Finishes, Interval, IntervalFrom, IntervalTo, Meets, NonEmpty, Overlaps,
5    Precedes, Starts,
6};
7
8/// An unbounded interval (`..`).
9#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq)]
10pub struct IntervalFull;
11
12impl From<RangeFull> for IntervalFull {
13    fn from(_value: RangeFull) -> Self {
14        Self
15    }
16}
17
18impl From<IntervalFull> for RangeFull {
19    fn from(_value: IntervalFull) -> Self {
20        Self
21    }
22}
23
24// IntervalFull vs. IntervalFull
25
26impl Precedes<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {}
27
28impl Meets<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {}
29
30impl Overlaps<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {}
31
32impl Starts<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {}
33
34impl Contains<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {}
35
36impl Finishes<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {}
37
38impl Equals<NonEmpty<IntervalFull>> for NonEmpty<IntervalFull> {
39    #[inline]
40    fn equals(&self, _other: &NonEmpty<IntervalFull>) -> bool {
41        true
42    }
43}
44
45// IntervalFull vs. IntervalTo
46
47impl<T> Precedes<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
48
49impl<T> Meets<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
50
51impl<T> Overlaps<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
52
53impl<T> Starts<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
54
55impl<T> Contains<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
56
57impl<T> Finishes<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
58
59impl<T> Equals<NonEmpty<IntervalTo<T>>> for NonEmpty<IntervalFull> {}
60
61// IntervalFull vs. IntervalFrom
62
63impl<T> Precedes<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
64
65impl<T> Meets<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
66
67impl<T> Overlaps<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
68
69impl<T> Starts<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
70
71impl<T> Contains<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
72
73impl<T> Finishes<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
74
75impl<T> Equals<NonEmpty<IntervalFrom<T>>> for NonEmpty<IntervalFull> {}
76
77// IntervalFull vs. Interval
78
79impl<T> Precedes<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {}
80
81impl<T> Meets<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {}
82
83impl<T> Overlaps<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {}
84
85impl<T> Starts<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {}
86
87impl<T> Contains<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {
88    fn contains(&self, _other: &NonEmpty<Interval<T>>) -> bool {
89        true
90    }
91}
92
93impl<T> Finishes<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {}
94
95impl<T> Equals<NonEmpty<Interval<T>>> for NonEmpty<IntervalFull> {}