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}