pom_trace/
range.rs

1use std::ops::{Range, RangeFrom, RangeFull, RangeTo};
2
3pub enum Bound<'a, T: 'a> {
4	Excluded(&'a T),
5	Included(&'a T),
6	Unbounded,
7}
8use self::Bound::*;
9
10pub trait RangeArgument<T> {
11	fn start(&self) -> Bound<T>;
12	fn end(&self) -> Bound<T>;
13}
14
15impl<T> RangeArgument<T> for Range<T> {
16	fn start(&self) -> Bound<T> {
17		Included(&self.start)
18	}
19	fn end(&self) -> Bound<T> {
20		Excluded(&self.end)
21	}
22}
23
24impl<T> RangeArgument<T> for RangeFrom<T> {
25	fn start(&self) -> Bound<T> {
26		Included(&self.start)
27	}
28	fn end(&self) -> Bound<T> {
29		Unbounded
30	}
31}
32
33impl<T> RangeArgument<T> for RangeTo<T> {
34	fn start(&self) -> Bound<T> {
35		Unbounded
36	}
37	fn end(&self) -> Bound<T> {
38		Excluded(&self.end)
39	}
40}
41
42impl<T> RangeArgument<T> for RangeFull {
43	fn start(&self) -> Bound<T> {
44		Unbounded
45	}
46	fn end(&self) -> Bound<T> {
47		Unbounded
48	}
49}
50
51impl RangeArgument<usize> for usize {
52	fn start(&self) -> Bound<usize> {
53		Included(self)
54	}
55	fn end(&self) -> Bound<usize> {
56		Included(self)
57	}
58}