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>;
|
||||
}
|
||||
|
||||
pub trait Measured {
|
||||
fn len(&self) -> usize;
|
||||
fn remaining(&self) -> usize;
|
||||
}
|
||||
|
||||
/// SpanRange encompasses the valid Ops::Range types for use with the Span trait.
|
||||
pub enum SpanRange {
|
||||
Range(std::ops::Range<usize>),
|
||||
@ -317,3 +322,25 @@ impl<'a> Peekable<&'a u8> for StrCursor<'a> {
|
||||
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::{
|
||||
SliceCursor, StrCursor,
|
||||
Cursor, Offsetable, Span
|
||||
Cursor, Offsetable, Span, Measured
|
||||
};
|
||||
|
||||
#[test]
|
||||
@ -87,8 +87,11 @@ fn test_str_span() {
|
||||
|
||||
let mut iter = StrCursor::new(input_str);
|
||||
assert_eq!(0, iter.get_offset());
|
||||
assert_eq!(12, iter.len());
|
||||
assert_eq!(12, iter.remaining());
|
||||
assert_eq!("foo", iter.span(0..3));
|
||||
iter.next();
|
||||
assert_eq!(11, iter.remaining());
|
||||
assert_eq!("oo", iter.span(0..2));
|
||||
}
|
||||
|
||||
@ -98,7 +101,10 @@ fn test_slice_span() {
|
||||
|
||||
let mut iter = SliceCursor::new(input_str.as_bytes());
|
||||
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));
|
||||
iter.next();
|
||||
assert_eq!(11, iter.remaining());
|
||||
assert_eq!("oo".as_bytes(), iter.span(0..2));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user