jaq_core/
rc_iter.rs

1/// A more flexible version of `&mut impl Iterator`.
2pub struct RcIter<I: ?Sized>(core::cell::RefCell<I>);
3
4impl<T, I: Iterator<Item = T> + ?Sized> Iterator for &RcIter<I> {
5    type Item = T;
6    fn next(&mut self) -> Option<T> {
7        self.0.borrow_mut().next()
8    }
9}
10
11impl<I> RcIter<I> {
12    /// Construct a new mutable iterator.
13    pub const fn new(iter: I) -> Self {
14        Self(core::cell::RefCell::new(iter))
15    }
16}