1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
use std::ops; pub trait Range<T> { fn start(&self) -> Option<&T> { None } fn end(&self) -> Option<&T> { None } } impl<T> Range<T> for ops::Range<T> { fn start(&self) -> Option<&T> { Some(&self.start) } fn end(&self) -> Option<&T> { Some(&self.end) } } impl<T> Range<T> for ops::RangeTo<T> { fn end(&self) -> Option<&T> { Some(&self.end) } } impl<T> Range<T> for ops::RangeFrom<T> { fn start(&self) -> Option<&T> { Some(&self.start) } } impl<T> Range<T> for ops::RangeFull {}