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:
bluss
2017-07-30 13:00:53 +02:00
parent 5dcb5ab2c7
commit 79ccdcd910
2 changed files with 44 additions and 1 deletions
+2 -1
View File
@@ -53,9 +53,10 @@ use serde::{Serialize, Deserialize, Serializer, Deserializer};
mod array; mod array;
mod array_string; mod array_string;
mod range;
pub use array::Array; pub use array::Array;
pub use odds::IndexRange as RangeArgument; pub use range::RangeArgument;
use array::Index; use array::Index;
pub use array_string::ArrayString; pub use array_string::ArrayString;
+42
View File
@@ -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) }
}