feat: Introduce a Measured trait
containing: * len * remaining
This commit is contained in:
parent
025535f03c
commit
699df1c4c9
27
src/lib.rs
27
src/lib.rs
@ -52,6 +52,11 @@ pub trait Peekable<O> {
|
|||||||
fn peek_next(&self) -> Option<O>;
|
fn peek_next(&self) -> Option<O>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait Measured {
|
||||||
|
fn len(&self) -> usize;
|
||||||
|
fn remaining(&self) -> usize;
|
||||||
|
}
|
||||||
|
|
||||||
/// SpanRange encompasses the valid Ops::Range types for use with the Span trait.
|
/// SpanRange encompasses the valid Ops::Range types for use with the Span trait.
|
||||||
pub enum SpanRange {
|
pub enum SpanRange {
|
||||||
Range(std::ops::Range<usize>),
|
Range(std::ops::Range<usize>),
|
||||||
@ -317,3 +322,25 @@ impl<'a> Peekable<&'a u8> for StrCursor<'a> {
|
|||||||
self.source.as_bytes().get(self.offset)
|
self.source.as_bytes().get(self.offset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> Measured for StrCursor<'a> {
|
||||||
|
fn len(&self) -> usize {
|
||||||
|
self.source.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn remaining(&self) -> usize {
|
||||||
|
self.source[self.offset..].len()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, O> Measured for SliceCursor<'a, O>
|
||||||
|
where O: Debug
|
||||||
|
{
|
||||||
|
fn len(&self) -> usize {
|
||||||
|
self.source.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn remaining(&self) -> usize {
|
||||||
|
self.source[self.offset..].len()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
SliceCursor, StrCursor,
|
SliceCursor, StrCursor,
|
||||||
Cursor, Offsetable, Span
|
Cursor, Offsetable, Span, Measured
|
||||||
};
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -87,8 +87,11 @@ fn test_str_span() {
|
|||||||
|
|
||||||
let mut iter = StrCursor::new(input_str);
|
let mut iter = StrCursor::new(input_str);
|
||||||
assert_eq!(0, iter.get_offset());
|
assert_eq!(0, iter.get_offset());
|
||||||
|
assert_eq!(12, iter.len());
|
||||||
|
assert_eq!(12, iter.remaining());
|
||||||
assert_eq!("foo", iter.span(0..3));
|
assert_eq!("foo", iter.span(0..3));
|
||||||
iter.next();
|
iter.next();
|
||||||
|
assert_eq!(11, iter.remaining());
|
||||||
assert_eq!("oo", iter.span(0..2));
|
assert_eq!("oo", iter.span(0..2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +101,10 @@ fn test_slice_span() {
|
|||||||
|
|
||||||
let mut iter = SliceCursor::new(input_str.as_bytes());
|
let mut iter = SliceCursor::new(input_str.as_bytes());
|
||||||
assert_eq!(0, iter.get_offset());
|
assert_eq!(0, iter.get_offset());
|
||||||
|
assert_eq!(12, iter.len());
|
||||||
|
assert_eq!(12, iter.remaining());
|
||||||
assert_eq!("foo".as_bytes(), iter.span(0..3));
|
assert_eq!("foo".as_bytes(), iter.span(0..3));
|
||||||
iter.next();
|
iter.next();
|
||||||
|
assert_eq!(11, iter.remaining());
|
||||||
assert_eq!("oo".as_bytes(), iter.span(0..2));
|
assert_eq!("oo".as_bytes(), iter.span(0..2));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user