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 { None } #[inline] /// End index (exclusive) fn end(&self) -> Option { None } } impl RangeArgument for RangeFull {} impl RangeArgument for RangeFrom { #[inline] fn start(&self) -> Option { Some(self.start) } } impl RangeArgument for RangeTo { #[inline] fn end(&self) -> Option { Some(self.end) } } impl RangeArgument for Range { #[inline] fn start(&self) -> Option { Some(self.start) } #[inline] fn end(&self) -> Option { Some(self.end) } }