1use std::ops::{
2 RangeFull,
3 RangeFrom,
4 RangeTo,
5 Range,
6};
7
8pub trait IndexRange<T=usize> {
13 #[inline]
14 fn start(&self) -> Option<T> { None }
16 #[inline]
17 fn end(&self) -> Option<T> { None }
19}
20
21
22impl<T> IndexRange<T> for RangeFull {}
23
24impl<T: Copy> IndexRange<T> for RangeFrom<T> {
25 #[inline]
26 fn start(&self) -> Option<T> { Some(self.start) }
27}
28
29impl<T: Copy> IndexRange<T> for RangeTo<T> {
30 #[inline]
31 fn end(&self) -> Option<T> { Some(self.end) }
32}
33
34impl<T: Copy> IndexRange<T> for Range<T> {
35 #[inline]
36 fn start(&self) -> Option<T> { Some(self.start) }
37 #[inline]
38 fn end(&self) -> Option<T> { Some(self.end) }
39}