arraydeque/
range.rs

1use std::ops::{Range, RangeFrom, RangeFull, RangeTo};
2
3/// **RangeArgument** is implemented by Rust's built-in range types, produced
4/// by range syntax like `..`, `a..`, `..b` or `c..d`.
5pub trait RangeArgument<T = usize> {
6    #[inline]
7    /// Start index (inclusive)
8    fn start(&self) -> Option<T> {
9        None
10    }
11    #[inline]
12    /// End index (exclusive)
13    fn end(&self) -> Option<T> {
14        None
15    }
16}
17
18impl<T> RangeArgument<T> for RangeFull {}
19
20impl<T: Copy> RangeArgument<T> for RangeFrom<T> {
21    #[inline]
22    fn start(&self) -> Option<T> {
23        Some(self.start)
24    }
25}
26
27impl<T: Copy> RangeArgument<T> for RangeTo<T> {
28    #[inline]
29    fn end(&self) -> Option<T> {
30        Some(self.end)
31    }
32}
33
34impl<T: Copy> RangeArgument<T> for Range<T> {
35    #[inline]
36    fn start(&self) -> Option<T> {
37        Some(self.start)
38    }
39    #[inline]
40    fn end(&self) -> Option<T> {
41        Some(self.end)
42    }
43}