1use std::ops::{Range, RangeFrom, RangeFull, RangeTo};
2
3pub trait RangeArgument<T = usize> {
6 #[inline]
7 fn start(&self) -> Option<T> {
9 None
10 }
11 #[inline]
12 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}