pareg_core 0.13.0

This library contains the implementation for the pareg library.
Documentation
use crate::Result;

use super::{Reader, ReaderSource};

/// Char iterator over reader.
pub struct ReaderChars<'r, 'a>(pub(crate) &'r mut Reader<'a>);

impl Iterator for ReaderChars<'_, '_> {
    type Item = Result<char>;

    fn next(&mut self) -> Option<Self::Item> {
        self.0.next().transpose()
    }

    fn size_hint(&self) -> (usize, Option<usize>) {
        match &self.0.source {
            ReaderSource::Io(_) => (self.0.undone.len(), None),
            ReaderSource::Str(s) => (
                self.0.undone.len() + (s.len() - self.0.pos) / 4,
                Some(self.0.undone.len() + s.len() - self.0.pos),
            ),
            ReaderSource::Iter(i) => {
                let (min, max) = i.size_hint();
                (
                    min + self.0.undone.len(),
                    max.map(|m| m + self.0.undone.len()),
                )
            }
            ReaderSource::IterErr(i) => {
                let (min, max) = i.size_hint();
                (
                    min + self.0.undone.len(),
                    max.map(|m| m + self.0.undone.len()),
                )
            }
        }
    }
}