| |
| use std::ops::{ |
| RangeFull, |
| RangeFrom, |
| RangeTo, |
| Range, |
| }; |
| |
| /// `RangeArgument` is implemented by Rust's built-in range types, produced |
| /// by range syntax like `..`, `a..`, `..b` or `c..d`. |
| /// |
| /// Note: This is arrayvec's provisional trait, waiting for stable Rust to |
| /// provide an equivalent. |
| pub trait RangeArgument { |
| #[inline] |
| /// Start index (inclusive) |
| fn start(&self) -> Option<usize> { None } |
| #[inline] |
| /// End index (exclusive) |
| fn end(&self) -> Option<usize> { None } |
| } |
| |
| |
| impl RangeArgument for RangeFull {} |
| |
| impl RangeArgument for RangeFrom<usize> { |
| #[inline] |
| fn start(&self) -> Option<usize> { Some(self.start) } |
| } |
| |
| impl RangeArgument for RangeTo<usize> { |
| #[inline] |
| fn end(&self) -> Option<usize> { Some(self.end) } |
| } |
| |
| impl RangeArgument for Range<usize> { |
| #[inline] |
| fn start(&self) -> Option<usize> { Some(self.start) } |
| #[inline] |
| fn end(&self) -> Option<usize> { Some(self.end) } |
| } |
| |