pub struct Parser<'input, T: BorrowedInput<'input>> { /* private fields */ }Expand description
A YAML parser.
Implementations§
Source§impl<'input> Parser<'input, StrInput<'input>>
impl<'input> Parser<'input, StrInput<'input>>
Sourcepub fn new_from_str(value: &'input str) -> Self
pub fn new_from_str(value: &'input str) -> Self
Create a parser over a borrowed string slice.
Every emitted event span has UTF-8 byte offsets into value:
Span::byte_range returns Some(start..end), with ordered, in-bounds UTF-8
boundaries. This includes zero-length spans for implicit events and end-of-input.
Span::slice returns Some when given the same, unchanged source string.
This guarantee applies to spans as emitted, before callers modify their markers.
Byte offsets remain optional in Span because other inputs, such as
Self::new_from_iter, do not provide them. Missing offsets must not be replaced
with zero or with Marker::index, which counts characters rather than bytes.
Sourcepub fn new_from_str_with_options(value: &'input str, options: Options) -> Self
pub fn new_from_str_with_options(value: &'input str, options: Options) -> Self
Create a parser over a borrowed string slice with configurable behavior and resource limits.
The byte-offset guarantee of Self::new_from_str also applies with custom options.
Source§impl<T> Parser<'static, BufferedInput<T>>
impl<T> Parser<'static, BufferedInput<T>>
Sourcepub fn new_from_iter(iter: T) -> Self
pub fn new_from_iter(iter: T) -> Self
Create a parser over an iterator of characters.
Sourcepub fn new_from_iter_with_options(iter: T, options: Options) -> Self
pub fn new_from_iter_with_options(iter: T, options: Options) -> Self
Create a parser over an iterator of characters with configurable behavior and resource limits.
Source§impl<T> Parser<'static, FallibleBufferedInput<T>>
impl<T> Parser<'static, FallibleBufferedInput<T>>
Sourcepub fn new_from_fallible_iter(iter: T) -> Self
pub fn new_from_fallible_iter(iter: T) -> Self
Sourcepub fn new_from_fallible_iter_with_options(iter: T, options: Options) -> Self
pub fn new_from_fallible_iter_with_options(iter: T, options: Options) -> Self
Create a parser over a fallible iterator of characters with configurable behavior and resource limits.
The iterator’s None return value means clean end-of-input. An Err item reports a
terminal source failure and is returned by the parser as a ScanError carrying the same
ErrorKind. The iterator is not polled again after its first error.
Source§impl<'input, T: BorrowedInput<'input>> Parser<'input, T>
impl<'input, T: BorrowedInput<'input>> Parser<'input, T>
Sourcepub fn anchor_offset(&self) -> usize
pub fn anchor_offset(&self) -> usize
Return the next anchor ID that will be assigned by this parser.
Sourcepub fn set_anchor_offset(&mut self, offset: usize)
pub fn set_anchor_offset(&mut self, offset: usize)
Set the next anchor ID that will be assigned by this parser.
Sourcepub fn with_options(src: T, options: Options) -> Self
pub fn with_options(src: T, options: Options) -> Self
Create a parser over a custom input source with configurable behavior and resource limits.
Use crate::options! to construct options without depending on exhaustive struct
literal syntax.
Without the comments feature, comment capture and emission are compiled out of both
the parser and its scanner. YAML comments are still skipped and validated.
Configure whether tag directives remain active across document boundaries.
This behavior is non-standard as per the YAML specification but can be encountered in the
wild. Passing true enables this non-standard extension and allows the parser to accept
input from test
QLJ7
of the yaml-test-suite:
%TAG !prefix! tag:example.com,2011:
--- !prefix!A
a: b
--- !prefix!B
c: d
--- !prefix!C
e: fWith keep_tags set to false, the above YAML is rejected. As per the specification, tags
only apply to the document immediately following them. This would error on !prefix!B.
With keep_tags set to true, the above YAML is accepted by the parser.
Sourcepub fn peek(&mut self) -> Option<Result<&(Event<'input>, Span), ScanError>>
pub fn peek(&mut self) -> Option<Result<&(Event<'input>, Span), ScanError>>
Try to load the next event and return it without consuming it from self.
Any subsequent call to Parser::peek will return the same value, until a call to
Iterator::next, Parser::load, or Self::proceed_next_document.
If the buffered value is a ScanError, Parser::next_event returns that error once
and then the parser is exhausted.
§Errors
Returns ScanError when loading the next event fails.
Sourcepub fn next_event(&mut self) -> Option<ParseResult<'input>>
pub fn next_event(&mut self) -> Option<ParseResult<'input>>
Try to load the next event and return it, consuming it from self.
After this returns a ScanError, subsequent calls return None unless
Self::proceed_next_document is called to recover at a document boundary.
§Errors
Returns ScanError when loading the next event fails.
Sourcepub fn proceed_next_document(&mut self) -> Result<bool, ScanError>
pub fn proceed_next_document(&mut self) -> Result<bool, ScanError>
Abandon the current document and resume at the next document boundary.
This can be called after an error from iteration, Self::peek, or Self::load, or
during successful parsing to skip the remainder of a document. Before parsing starts it
skips the first document. Immediately after Event::DocumentEnd it leaves the next
document ready to read. Repeated calls skip successive documents.
Returns true when another document remains, including an empty or malformed document,
and false at clean EOF. This looks past inter-document comments and end markers without
consuming the next document’s events. Comments inspected by this lookahead are buffered
for subsequent reads; with comment emission enabled, the configured comment-buffer limit
applies. Syntax errors encountered in the next document remain available to normal parsing.
Read subsequent events using the usual parser methods. They start with the next
Event::DocumentStart (possibly preceded by comments), or Event::StreamEnd if no
document remains. An already consumed stream end stays exhausted. This method does not
emit another Event::StreamStart.
After a syntax error, recovery scans forward from the scanner’s current position to a
separated --- or valid ... at column zero, or EOF. An explicit end marker also permits
a following implicit document and its directive prefix. Indented markers, inline markers,
and scalar text such as ---suffix are not synchronization points. Input is never rewound;
event spans retain their original source positions.
If a directive prefix fails before its opening ---, that document’s body is skipped too.
Open collections, buffered events/comments, and anchor definitions of an abandoned
document are discarded. No synthetic collection ends, document end, or error node are
emitted for it: consumers building a tree must abandon or mark their own partial nodes.
Anchor IDs remain unique across documents. Directives are reset as at a normal document
boundary, including the Self::keep_tags policy.
Skipped syntax errors are suppressed. Recovery does not repair content within a document, preserve its anchors for another document, or validate the next document in advance. Ordinary parsing still stops at the first error unless this method is explicitly called. Scanning moves forward with work proportional to the skipped input; no diagnostic list is accumulated. Cancellation can be supplied through a fallible input source.
§Example
use granit_parser::{Event, Parser};
let mut parser = Parser::new_from_str("broken: [1, 2\n---\nhealthy: true\n");
let error = parser.by_ref().find_map(Result::err).unwrap();
assert!(parser.next().is_none());
// Record the diagnostic and abandon any open nodes in the consumer's partial tree.
assert!(parser.proceed_next_document()?);
assert!(matches!(parser.next().unwrap()?.0, Event::DocumentStart(true, _)));
let rest = parser.collect::<Result<Vec<_>, _>>()?;
assert!(rest.iter().any(|(event, _)| event.scalar().is_some_and(|(v, _)| v == "healthy")));§Errors
Returns a source failure (including I/O, decoding, or cancellation errors supplied by the
input). Source failures cannot be recovered and leave the parser exhausted.
With comment emission enabled, also returns ErrorKind::TooManyComments if looking ahead
would exceed the comment-buffer limit; parsing then stays exhausted until recovery is
requested again.
Sourcepub fn load<R: SpannedEventReceiver<'input>>(
&mut self,
recv: &mut R,
multi: bool,
) -> Result<(), ScanError>
pub fn load<R: SpannedEventReceiver<'input>>( &mut self, recv: &mut R, multi: bool, ) -> Result<(), ScanError>
Load the YAML from the stream in self, pushing events into recv.
The contents of the stream are parsed and the corresponding events are sent into the
receiver. For detailed explanations about how events work, see EventReceiver.
If multi is set to true, the parser will allow parsing of multiple YAML documents
inside the stream.
Use this method when event handling is infallible. If receiver code can return an
application error and should stop parsing, use Parser::try_load instead. If the caller
should directly control when the next event is read, use Parser’s
core::iter::Iterator implementation.
Note that any EventReceiver is also a SpannedEventReceiver, so implementing the
former is enough to call this function.
After a scan error, the parser is exhausted: Parser::peek and Parser::next_event
return None, and further calls to load or Parser::try_load return Ok(())
without emitting events.
§Example
struct EventSink<'input> {
events: Vec<Event<'input>>,
}
impl<'input> EventReceiver<'input> for EventSink<'input> {
fn on_event(&mut self, ev: Event<'input>) {
self.events.push(ev);
}
}
let mut parser = Parser::new_from_str("a: 1\n");
let mut sink = EventSink { events: Vec::new() };
parser.load(&mut sink, false)?;
assert!(sink
.events
.iter()
.any(|ev| matches!(ev, Event::Scalar(value, ..) if value == "a")));§Errors
Returns ScanError when loading fails.
Sourcepub fn try_load<R: TrySpannedEventReceiver<'input>>(
&mut self,
recv: &mut R,
multi: bool,
) -> Result<(), TryLoadError<R::Error>>
pub fn try_load<R: TrySpannedEventReceiver<'input>>( &mut self, recv: &mut R, multi: bool, ) -> Result<(), TryLoadError<R::Error>>
Load the YAML from the stream in self, pushing events into recv.
This is the fallible counterpart to Parser::load. If recv returns an error, parsing
stops immediately and that error is returned as TryLoadError::Receiver.
If multi is set to true, the parser will allow parsing of multiple YAML documents
inside the stream.
If the receiver returns an error, the parser is left positioned immediately after the event that caused the receiver error. Callers should treat the parser as partially consumed.
After a scan error, the parser is exhausted: Parser::peek and Parser::next_event
return None, and further calls to try_load or Parser::load return Ok(())
without emitting events.
§Example
#[derive(Debug, PartialEq, Eq)]
enum ValidationError {
ForbiddenScalar,
}
struct Validator;
impl<'input> TryEventReceiver<'input> for Validator {
type Error = ValidationError;
fn on_event(&mut self, ev: Event<'input>) -> Result<(), Self::Error> {
if matches!(ev, Event::Scalar(value, ..) if value.as_ref() == "bad") {
Err(ValidationError::ForbiddenScalar)
} else {
Ok(())
}
}
}
let mut parser = Parser::new_from_str("value: bad\n");
let mut validator = Validator;
let err = parser.try_load(&mut validator, false).unwrap_err();
assert_eq!(err, TryLoadError::Receiver(ValidationError::ForbiddenScalar));§Errors
Returns TryLoadError::Scan when scanning or parsing the stream fails. Returns
TryLoadError::Receiver when recv returns an error.
Trait Implementations§
impl<'input, T: BorrowedInput<'input>> FusedIterator for Parser<'input, T>
Source§impl<'input, T: BorrowedInput<'input>> Iterator for Parser<'input, T>
impl<'input, T: BorrowedInput<'input>> Iterator for Parser<'input, T>
Source§type Item = Result<(Event<'input>, Span), ScanError>
type Item = Result<(Event<'input>, Span), ScanError>
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk)N values. Read more1.0.0 (const: unstable) · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 (const: unstable) · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 (const: unstable) · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by)n elements. Read more1.0.0 (const: unstable) · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
nth element of the iterator. Read more1.28.0 (const: unstable) · Source§fn step_by(self, step: usize) -> StepBy<Self> ⓘwhere
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self> ⓘwhere
Self: Sized,
1.0.0 (const: unstable) · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter> ⓘ
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter> ⓘ
1.0.0 (const: unstable) · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter> ⓘwhere
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter> ⓘwhere
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self> ⓘ
fn intersperse(self, separator: Self::Item) -> Intersperse<Self> ⓘ
iter_intersperse)separator between items
of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G> ⓘ
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G> ⓘ
iter_intersperse)separator
between items of the original iterator. Read more1.0.0 (const: unstable) · Source§fn map<B, F>(self, f: F) -> Map<Self, F> ⓘ
fn map<B, F>(self, f: F) -> Map<Self, F> ⓘ
1.21.0 (const: unstable) · Source§fn for_each<F>(self, f: F)
fn for_each<F>(self, f: F)
1.0.0 (const: unstable) · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P> ⓘ
fn filter<P>(self, predicate: P) -> Filter<Self, P> ⓘ
1.0.0 (const: unstable) · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> ⓘ
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> ⓘ
1.0.0 (const: unstable) · Source§fn enumerate(self) -> Enumerate<Self> ⓘwhere
Self: Sized,
fn enumerate(self) -> Enumerate<Self> ⓘwhere
Self: Sized,
1.0.0 (const: unstable) · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> ⓘ
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> ⓘ
1.57.0 (const: unstable) · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P> ⓘ
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P> ⓘ
1.0.0 (const: unstable) · Source§fn skip(self, n: usize) -> Skip<Self> ⓘwhere
Self: Sized,
fn skip(self, n: usize) -> Skip<Self> ⓘwhere
Self: Sized,
n elements. Read more1.0.0 (const: unstable) · Source§fn take(self, n: usize) -> Take<Self> ⓘwhere
Self: Sized,
fn take(self, n: usize) -> Take<Self> ⓘwhere
Self: Sized,
n elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 (const: unstable) · Source§fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> ⓘ
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> ⓘ
1.0.0 (const: unstable) · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> ⓘ
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> ⓘ
1.29.0 (const: unstable) · Source§fn flatten(self) -> Flatten<Self> ⓘ
fn flatten(self) -> Flatten<Self> ⓘ
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N> ⓘ
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N> ⓘ
iter_map_windows)f for each contiguous window of size N over
self and returns an iterator over the outputs of f. Like slice::windows(),
the windows during mapping overlap as well. Read more1.0.0 (const: unstable) · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F> ⓘ
fn inspect<F>(self, f: F) -> Inspect<Self, F> ⓘ
1.0.0 (const: unstable) · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator. Read more1.0.0 (const: unstable) · Source§fn collect<B>(self) -> B
fn collect<B>(self) -> B
Source§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into)1.0.0 (const: unstable) · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned)true precede all those that return false. Read more1.27.0 (const: unstable) · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 (const: unstable) · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 (const: unstable) · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 (const: unstable) · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce)1.0.0 (const: unstable) · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 (const: unstable) · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 (const: unstable) · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 (const: unstable) · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find)1.0.0 (const: unstable) · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 (const: unstable) · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 (const: unstable) · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 (const: unstable) · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 (const: unstable) · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 (const: unstable) · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 (const: unstable) · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 (const: unstable) · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 (const: unstable) · Source§fn copied<'a, T>(self) -> Copied<Self> ⓘ
fn copied<'a, T>(self) -> Copied<Self> ⓘ
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N> ⓘwhere
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N> ⓘwhere
Self: Sized,
iter_array_chunks)N elements of the iterator at a time. Read more1.11.0 (const: unstable) · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read more1.5.0 (const: unstable) · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd elements of
this Iterator with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by)1.5.0 (const: unstable) · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator are lexicographically
less than those of another. Read more1.5.0 (const: unstable) · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator are lexicographically
less or equal to those of another. Read more1.5.0 (const: unstable) · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator are lexicographically
greater than those of another. Read more1.5.0 (const: unstable) · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator are lexicographically
greater than or equal to those of another. Read more1.82.0 (const: unstable) · Source§fn is_sorted(self) -> bool
fn is_sorted(self) -> bool
1.82.0 (const: unstable) · Source§fn is_sorted_by<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
Source§impl<'input, T: BorrowedInput<'input>> ParserTrait<'input> for Parser<'input, T>
impl<'input, T: BorrowedInput<'input>> ParserTrait<'input> for Parser<'input, T>
Source§fn peek(&mut self) -> Option<Result<&(Event<'input>, Span), ScanError>>
fn peek(&mut self) -> Option<Result<&(Event<'input>, Span), ScanError>>
self.Source§fn next_event(&mut self) -> Option<ParseResult<'input>>
fn next_event(&mut self) -> Option<ParseResult<'input>>
self.