Enum ErrMode
pub enum ErrMode<E> {
Incomplete(Needed),
Backtrack(E),
Cut(E),
}
dep_winnow
only.Expand description
Add parse error state to ParserError
s
Variants§
Incomplete(Needed)
There was not enough data to determine the appropriate action
More data needs to be buffered before retrying the parse.
This must only be set when the Stream
is partial, like with
Partial
Convert this into an Backtrack
with Parser::complete_err
Backtrack(E)
The parser failed with a recoverable error (the default).
For example, a parser for json values might include a
dec_uint
as one case in an alt
combinator. If it fails, the next case should be tried.
Cut(E)
The parser had an unrecoverable error.
The parser was on the right branch, so directly report it to the user rather than trying
other branches. You can use cut_err()
combinator to switch
from ErrMode::Backtrack
to ErrMode::Cut
.
For example, one case in an alt
combinator found a unique prefix
and you want any further errors parsing the case to be reported to the user.
Implementations§
§impl<E> ErrMode<E>
impl<E> ErrMode<E>
pub fn is_incomplete(&self) -> bool
pub fn is_incomplete(&self) -> bool
Tests if the result is Incomplete
pub fn map<E2, F>(self, f: F) -> ErrMode<E2>where
F: FnOnce(E) -> E2,
pub fn map<E2, F>(self, f: F) -> ErrMode<E2>where
F: FnOnce(E) -> E2,
Applies the given function to the inner error
pub fn convert<F>(self) -> ErrMode<F>where
E: ErrorConvert<F>,
pub fn convert<F>(self) -> ErrMode<F>where
E: ErrorConvert<F>,
Automatically converts between errors if the underlying type supports it
pub fn into_inner(self) -> Option<E> ⓘ
pub fn into_inner(self) -> Option<E> ⓘ
Unwrap the mode, returning the underlying error
Returns None
for ErrMode::Incomplete
§impl<T> ErrMode<InputError<T>>where
T: Clone,
impl<T> ErrMode<InputError<T>>where
T: Clone,
pub fn map_input<U, F>(self, f: F) -> ErrMode<InputError<U>>
pub fn map_input<U, F>(self, f: F) -> ErrMode<InputError<U>>
Maps ErrMode<InputError<T>>
to ErrMode<InputError<U>>
with the given F: T -> U
Trait Implementations§
§impl<I, C, E> AddContext<I, C> for ErrMode<E>where
I: Stream,
E: AddContext<I, C>,
impl<I, C, E> AddContext<I, C> for ErrMode<E>where
I: Stream,
E: AddContext<I, C>,
§fn add_context(
self,
input: &I,
token_start: &<I as Stream>::Checkpoint,
context: C,
) -> ErrMode<E>
fn add_context( self, input: &I, token_start: &<I as Stream>::Checkpoint, context: C, ) -> ErrMode<E>
§impl<I, EXT, E> FromExternalError<I, EXT> for ErrMode<E>where
E: FromExternalError<I, EXT>,
impl<I, EXT, E> FromExternalError<I, EXT> for ErrMode<E>where
E: FromExternalError<I, EXT>,
§fn from_external_error(input: &I, kind: ErrorKind, e: EXT) -> ErrMode<E>
fn from_external_error(input: &I, kind: ErrorKind, e: EXT) -> ErrMode<E>
ParserError::from_error_kind
but also include an external error.§impl<I, E> ParserError<I> for ErrMode<E>where
I: Stream,
E: ParserError<I>,
impl<I, E> ParserError<I> for ErrMode<E>where
I: Stream,
E: ParserError<I>,
§fn from_error_kind(input: &I, kind: ErrorKind) -> ErrMode<E>
fn from_error_kind(input: &I, kind: ErrorKind) -> ErrMode<E>
ErrorKind
§fn append(
self,
input: &I,
token_start: &<I as Stream>::Checkpoint,
kind: ErrorKind,
) -> ErrMode<E>
fn append( self, input: &I, token_start: &<I as Stream>::Checkpoint, kind: ErrorKind, ) -> ErrMode<E>
ParserError::from_error_kind
but merges it with the existing error. Read moreimpl<E> Eq for ErrMode<E>where
E: Eq,
impl<E> StructuralPartialEq for ErrMode<E>
Auto Trait Implementations§
impl<E> Freeze for ErrMode<E>where
E: Freeze,
impl<E> RefUnwindSafe for ErrMode<E>where
E: RefUnwindSafe,
impl<E> Send for ErrMode<E>where
E: Send,
impl<E> Sync for ErrMode<E>where
E: Sync,
impl<E> Unpin for ErrMode<E>where
E: Unpin,
impl<E> UnwindSafe for ErrMode<E>where
E: UnwindSafe,
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize ⓘ
fn byte_align(&self) -> usize ⓘ
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of_val(&self) -> usize ⓘ
fn mem_align_of_val(&self) -> usize ⓘ
Source§fn mem_size_of_val(&self) -> usize ⓘ
fn mem_size_of_val(&self) -> usize ⓘ
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.