Trait byte_parser::ParseIterator [−][src]
The main trait of this crate.
This trait allows to parse a slice or a str more easely.
This trait is lazy, if something should happen you need to consume
it.
For example, to_str
only works if you call record
and consume
first.
Associated Types
type PointInTime: PointInTime
[src]
The type that is used to store information about the current position.
Required methods
fn slice(&self) -> &'s [u8]
[src]
Returns the full underlying slice.
fn pit(&self) -> Self::PointInTime
[src]
Returns the current position. Should be used in combination with
restore_pit
.
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
Restore to a given position.
Warning
Only call this method with a pit that was received from this instance.
fn advance(&mut self) -> Option<()>
[src]
Advances the internal position.
fn recorder(&self) -> Option<&Recorder>
[src]
Returns a Recorder
if recording was started.
unsafe fn is_valid_utf8() -> bool
[src]
Safety
Returning false
is always safe.
If you return true
the entire underlying slice must be valid utf8.
Provided methods
fn advance_if<F>(&mut self, advance_if: F) -> Option<bool> where
F: FnOnce(&u8) -> bool,
[src]
F: FnOnce(&u8) -> bool,
Advances if advance_if
returns true
.
Returns None
if the iterator is empty.
fn byte(&self) -> Option<u8>
[src]
Returns the current byte if it exists.
fn next(&mut self) -> Option<u8>
[src]
Returns the next byte if it exists and advances the internal position.
fn next_if<F>(&mut self, next_if: F) -> Option<u8> where
F: FnOnce(&u8) -> bool,
[src]
F: FnOnce(&u8) -> bool,
Advances one if next_if
returns true
.
Returns None
if did not advance.
fn peek(&mut self) -> Option<u8>
[src]
Returns the next byte without advancing the internal position.
fn peek_len(&mut self, len: usize) -> Option<&'s [u8]> where
Self: Sized,
[src]
Self: Sized,
Returns the next x bytes without advancing the internal position.
fn peek_at(&mut self, pos: usize) -> Option<u8>
[src]
Tries to get the byte at the given position, without advancing.
fn ignore_byte(&mut self, byte: u8) -> IgnoreByte<'_, Self> where
Self: Sized,
[src]
Self: Sized,
Skips a given byte when calling next.
Warning
If you later call to_slice
or a similar methods
the skipped byte will still be returned.
Example
let mut parser = Parser::new(b"abc"); let mut parser = parser.ignore_byte(b'b'); assert_eq!(b'a', parser.next().unwrap()); assert_eq!(b'c', parser.next().unwrap());
fn while_byte_fn<F>(&mut self, f: F) -> WhileByteFn<'_, Self, F> where
Self: Sized,
F: Fn(&u8) -> bool,
[src]
Self: Sized,
F: Fn(&u8) -> bool,
Advances while the function returns true
.
fn consume(&mut self) -> &mut Self
[src]
Consumes until the iterator is empty.
Meaning that advance
returns None.
fn consume_and_count(&mut self) -> usize
[src]
Consumes until the iterator is empty, and returns how many times advance got called.
fn consume_len(&mut self, len: usize) -> Result<&mut Self, usize>
[src]
Consumes a given length. Returns how much was consumed if could not consume all.
fn consume_at_least(&mut self, len: usize) -> Result<&mut Self, usize>
[src]
Consumes until the iterator is empty.
Returns Err(len)
if could not consume len
.
fn consume_at_least_and_count(&mut self, len: usize) -> Result<usize, usize>
[src]
Consumes until the iterator is empty, returning how much was consumed.
Returns Err(len)
if could not consume len
.
fn consume_while_byte_fn<F>(&mut self, f: F) -> &mut Self where
Self: Sized,
F: Fn(&u8) -> bool,
[src]
Self: Sized,
F: Fn(&u8) -> bool,
Consumes while the function returns true
.
fn consume_while_byte(&mut self, byte: u8) -> &mut Self where
Self: Sized,
[src]
Self: Sized,
Consumes while a give byte
is returned.
fn split_on_byte(&mut self, byte: u8) -> SplitOnByte<'_, Self> where
Self: Sized,
[src]
Self: Sized,
Splits the iterator at a given byte.
Example
let mut parser = StrParser::new("Hello World!"); let mut splitter = parser.split_on_byte(b' '); let hello = splitter.next().unwrap() .record().consume_to_str(); let world = splitter.next().unwrap() .record().consume_to_str(); assert_eq!(hello, "Hello"); assert_eq!(world, "World!"); assert!(splitter.next().is_none());
fn count_byte(&mut self, byte: u8) -> usize where
Self: Sized,
[src]
Self: Sized,
fn record(&mut self) -> RecordIter<'_, Self> where
Self: Sized,
[src]
Self: Sized,
Starts a new Recorder
which starts recording at this position.
fn to_slice(&self) -> &'s [u8]
[src]
Returns a slice from the start of recording until now.
Panics
If not called in context of a recorder. Meaning before
calling record
.
unsafe fn to_str_unchecked(&self) -> &'s str
[src]
Returns a str
from the start of recording until the current position
without checking if the data is valid utf8.
Panics
Panics if not called after record
gets called.
Safety
This function is safe if Self::is_valid_utf8
returns true
.
fn to_str(&self) -> &'s str
[src]
Returns a str
from the start of recording until the current position.
Example
let str_from_slice = Parser::new(b"abc") .record() .consume() .to_str(); assert_eq!(str_from_slice, "abc"); let str_from_str = StrParser::new("abc") .record() .consume() .to_str(); assert_eq!(str_from_str, "abc");
Panics
Panics if not called after record
was called.
Or if invalid utf8 is present.
fn try_to_str(&self) -> Result<&'s str, Utf8Error>
[src]
Returns a str
from the start of recording until the current position.
Example
let str_from_slice = Parser::new(b"abc") .record() .consume() .try_to_str().expect("slice is not valid utf8"); assert_eq!(str_from_slice, "abc"); let str_from_str = StrParser::new("abc") .record() .consume() // can never return Err .try_to_str().unwrap(); assert_eq!(str_from_str, "abc");
Panics
Panics if not called after record
was called.
fn consume_to_slice(&mut self) -> &'s [u8]
[src]
Consumes the iterator and then returns a slice from the start of recording until the current position.
Panics
Panics if not called after record
was called.
unsafe fn consume_to_str_unchecked(&mut self) -> &'s str
[src]
Consumes the iterator and then returns a str from the start of recording until the current position. Without checking if the underlying data is valid utf8.
Panics
Panics if not called after record
was called.
fn consume_to_str(&mut self) -> &'s str
[src]
Consumes the iterator and then returns a str from the start of recording until the current position.
Panics
Panics if not called after record
was called or if the data contains invalid
utf8.
fn consume_try_to_str(&mut self) -> Result<&'s str, Utf8Error>
[src]
Consumes the iterator and then returns a str from the start of recording until the current position if the data is valid utf8.
Panics
Panics if not called after record
was called.
fn expect_byte_fn<F>(&mut self, f: F) -> Result<&mut Self, Option<u8>> where
F: Fn(u8) -> bool,
[src]
F: Fn(u8) -> bool,
Returns &mut Self
if the function returns true
on the next byte.
Else returns the byte that was received.
fn expect_byte(&mut self, byte: u8) -> Result<&mut Self, Option<u8>>
[src]
Returns &mut Self
if the function byte is equal to the next byte.
Else returns the actual byte that was received.
fn expect_none(&mut self) -> Result<&mut Self, u8>
[src]
Returns &mut Self
if the end was reached (next returns None).
fn stop(&mut self) -> Stop<'_, Self> where
Self: Sized,
[src]
Self: Sized,
Returns a ParseIterator
that always returns None.
Example
let mut s = StrParser::new("abc"); assert_eq!(b'a', s.next().unwrap()); let mut s = s.stop(); assert!(s.next().is_none());
Implementors
impl<'s> ParseIterator<'s> for Parser<'s>
[src]
type PointInTime = ParserPointInTime
fn slice(&self) -> &'s [u8]
[src]
fn pit(&self) -> Self::PointInTime
[src]
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
fn advance(&mut self) -> Option<()>
[src]
fn recorder(&self) -> Option<&Recorder>
[src]
unsafe fn is_valid_utf8() -> bool
[src]
impl<'s> ParseIterator<'s> for StrParser<'s>
[src]
type PointInTime = ParserPointInTime
fn slice(&self) -> &'s [u8]
[src]
fn pit(&self) -> Self::PointInTime
[src]
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
fn advance(&mut self) -> Option<()>
[src]
fn recorder(&self) -> Option<&Recorder>
[src]
unsafe fn is_valid_utf8() -> bool
[src]
impl<'s, 'a, T> ParseIterator<'s> for IgnoreByte<'a, T> where
T: ParseIterator<'s>,
[src]
T: ParseIterator<'s>,
type PointInTime = T::PointInTime
fn slice(&self) -> &'s [u8]
[src]
fn pit(&self) -> Self::PointInTime
[src]
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
fn advance(&mut self) -> Option<()>
[src]
fn recorder(&self) -> Option<&Recorder>
[src]
unsafe fn is_valid_utf8() -> bool
[src]
impl<'s, 'a, T> ParseIterator<'s> for RecordIter<'a, T> where
T: ParseIterator<'s>,
[src]
T: ParseIterator<'s>,
type PointInTime = T::PointInTime
fn slice(&self) -> &'s [u8]
[src]
fn pit(&self) -> Self::PointInTime
[src]
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
fn advance(&mut self) -> Option<()>
[src]
fn recorder(&self) -> Option<&Recorder>
[src]
unsafe fn is_valid_utf8() -> bool
[src]
impl<'s, 'a, T> ParseIterator<'s> for SplitOnByteIter<'a, T> where
T: ParseIterator<'s>,
[src]
T: ParseIterator<'s>,
type PointInTime = SplitOnBytePointInTime
fn slice(&self) -> &'s [u8]
[src]
fn pit(&self) -> Self::PointInTime
[src]
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
fn advance(&mut self) -> Option<()>
[src]
fn recorder(&self) -> Option<&Recorder>
[src]
unsafe fn is_valid_utf8() -> bool
[src]
impl<'s, 'a, T> ParseIterator<'s> for Stop<'a, T> where
T: ParseIterator<'s>,
[src]
T: ParseIterator<'s>,
type PointInTime = T::PointInTime
fn slice(&self) -> &'s [u8]
[src]
fn pit(&self) -> Self::PointInTime
[src]
fn restore_pit(&mut self, pit: Self::PointInTime)
[src]
fn advance(&mut self) -> Option<()>
[src]
fn recorder(&self) -> Option<&Recorder>
[src]
unsafe fn is_valid_utf8() -> bool
[src]
impl<'s, 'a, T, F> ParseIterator<'s> for WhileByteFn<'a, T, F> where
T: ParseIterator<'s>,
F: Fn(&u8) -> bool,
[src]
T: ParseIterator<'s>,
F: Fn(&u8) -> bool,