|  | 
 | 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) } | 
 | } | 
 |  |