FEAT: Copy RangeArgument from crate odds
This means odds is no longer a public dependency, which simplifies the version story for arrayvec
This commit is contained in:
+2
-1
@@ -53,9 +53,10 @@ use serde::{Serialize, Deserialize, Serializer, Deserializer};
|
||||
|
||||
mod array;
|
||||
mod array_string;
|
||||
mod range;
|
||||
|
||||
pub use array::Array;
|
||||
pub use odds::IndexRange as RangeArgument;
|
||||
pub use range::RangeArgument;
|
||||
use array::Index;
|
||||
pub use array_string::ArrayString;
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
|
||||
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) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user