pub struct Stateful<I, S> {
    pub input: I,
    pub state: S,
}Expand description
Thread global state through your parsers
Use cases
- Recursion checks
 - Error recovery
 - Debugging
 
Example
#[derive(Clone, Debug)]
struct State<'s>(&'s Cell<u32>);
impl<'s> State<'s> {
    fn count(&self) {
        self.0.set(self.0.get() + 1);
    }
}
type Stream<'is> = Stateful<&'is str, State<'is>>;
fn word<'s>(i: &mut Stream<'s>) -> PResult<&'s str> {
  i.state.count();
  alpha1.parse_next(i)
}
let data = "Hello";
let state = Cell::new(0);
let input = Stream { input: data, state: State(&state) };
let output = word.parse(input).unwrap();
assert_eq!(state.get(), 1);Fields§
§input: IInner input being wrapped in state
state: SUser-provided state
Trait Implementations§
source§impl<I, S, U> Compare<U> for Stateful<I, S>where
    I: Compare<U>,
 
impl<I, S, U> Compare<U> for Stateful<I, S>where I: Compare<U>,
source§fn compare(&self, other: U) -> CompareResult
 
fn compare(&self, other: U) -> CompareResult
Compares self to another value for equality
source§fn compare_no_case(&self, other: U) -> CompareResult
 
fn compare_no_case(&self, other: U) -> CompareResult
Compares self to another value for equality
independently of the case. Read more
source§impl<I, S, T> FindSlice<T> for Stateful<I, S>where
    I: FindSlice<T>,
 
impl<I, S, T> FindSlice<T> for Stateful<I, S>where I: FindSlice<T>,
source§fn find_slice(&self, substr: T) -> Option<usize>
 
fn find_slice(&self, substr: T) -> Option<usize>
Returns the offset of the slice if it is found
source§impl<I, S> Offset<<Stateful<I, S> as Stream>::Checkpoint> for Stateful<I, S>where
    I: Stream,
    S: Clone + Debug,
 
impl<I, S> Offset<<Stateful<I, S> as Stream>::Checkpoint> for Stateful<I, S>where I: Stream, S: Clone + Debug,
source§fn offset_from(&self, other: &<Stateful<I, S> as Stream>::Checkpoint) -> usize
 
fn offset_from(&self, other: &<Stateful<I, S> as Stream>::Checkpoint) -> usize
Offset between the first byte of 
start and the first byte of selfsource§impl<I, S> Offset for Stateful<I, S>where
    I: Stream,
    S: Clone + Debug,
 
impl<I, S> Offset for Stateful<I, S>where I: Stream, S: Clone + Debug,
source§fn offset_from(&self, start: &Self) -> usize
 
fn offset_from(&self, start: &Self) -> usize
Offset between the first byte of 
start and the first byte of selfsource§impl<I: PartialEq, S: PartialEq> PartialEq for Stateful<I, S>
 
impl<I: PartialEq, S: PartialEq> PartialEq for Stateful<I, S>
source§impl<I: Stream, S: Clone + Debug> Stream for Stateful<I, S>
 
impl<I: Stream, S: Clone + Debug> Stream for Stateful<I, S>
§type IterOffsets = <I as Stream>::IterOffsets
 
type IterOffsets = <I as Stream>::IterOffsets
Iterate with the offset from the current location
§type Checkpoint = Checkpoint<<I as Stream>::Checkpoint>
 
type Checkpoint = Checkpoint<<I as Stream>::Checkpoint>
A parse location within the stream
source§fn iter_offsets(&self) -> Self::IterOffsets
 
fn iter_offsets(&self) -> Self::IterOffsets
Iterate with the offset from the current location
source§fn eof_offset(&self) -> usize
 
fn eof_offset(&self) -> usize
Returns the offset to the end of the input
source§fn next_token(&mut self) -> Option<Self::Token>
 
fn next_token(&mut self) -> Option<Self::Token>
Split off the next token from the input
source§fn offset_for<P>(&self, predicate: P) -> Option<usize>where
    P: Fn(Self::Token) -> bool,
 
fn offset_for<P>(&self, predicate: P) -> Option<usize>where P: Fn(Self::Token) -> bool,
Finds the offset of the next matching token
source§fn offset_at(&self, tokens: usize) -> Result<usize, Needed>
 
fn offset_at(&self, tokens: usize) -> Result<usize, Needed>
Get the offset for the number of 
tokens into the stream Read moresource§fn next_slice(&mut self, offset: usize) -> Self::Slice
 
fn next_slice(&mut self, offset: usize) -> Self::Slice
Split off a slice of tokens from the input Read more
source§fn checkpoint(&self) -> Self::Checkpoint
 
fn checkpoint(&self) -> Self::Checkpoint
Save the current parse location within the stream
source§fn reset(&mut self, checkpoint: Self::Checkpoint)
 
fn reset(&mut self, checkpoint: Self::Checkpoint)
Revert the stream to a prior 
Self::Checkpoint Read moresource§impl<I, S> StreamIsPartial for Stateful<I, S>where
    I: StreamIsPartial,
 
impl<I, S> StreamIsPartial for Stateful<I, S>where I: StreamIsPartial,
§type PartialState = <I as StreamIsPartial>::PartialState
 
type PartialState = <I as StreamIsPartial>::PartialState
Whether the stream is currently partial or complete
source§fn complete(&mut self) -> Self::PartialState
 
fn complete(&mut self) -> Self::PartialState
Mark the stream is complete
source§fn restore_partial(&mut self, state: Self::PartialState)
 
fn restore_partial(&mut self, state: Self::PartialState)
Restore the stream back to its previous state
source§fn is_partial_supported() -> bool
 
fn is_partial_supported() -> bool
Report whether the 
Stream is can ever be incompletesource§fn is_partial(&self) -> bool
 
fn is_partial(&self) -> bool
Report whether the 
Stream is currently incompletesource§impl<I, S> UpdateSlice for Stateful<I, S>where
    I: UpdateSlice,
    S: Clone + Debug,
 
impl<I, S> UpdateSlice for Stateful<I, S>where I: UpdateSlice, S: Clone + Debug,
source§fn update_slice(self, inner: Self::Slice) -> Self
 
fn update_slice(self, inner: Self::Slice) -> Self
Convert an 
Output type to be used as Streamimpl<I: Copy, S: Copy> Copy for Stateful<I, S>
impl<I: Eq, S: Eq> Eq for Stateful<I, S>
impl<I, S> StructuralEq for Stateful<I, S>
impl<I, S> StructuralPartialEq for Stateful<I, S>
Auto Trait Implementations§
impl<I, S> RefUnwindSafe for Stateful<I, S>where I: RefUnwindSafe, S: RefUnwindSafe,
impl<I, S> Send for Stateful<I, S>where I: Send, S: Send,
impl<I, S> Sync for Stateful<I, S>where I: Sync, S: Sync,
impl<I, S> Unpin for Stateful<I, S>where I: Unpin, S: Unpin,
impl<I, S> UnwindSafe for Stateful<I, S>where I: UnwindSafe, S: UnwindSafe,
Blanket Implementations§
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
Mutably borrows from an owned value. Read more