lending_iterator

Struct FromFn

Source
pub struct FromFn<Item, State, Next>
where Item: HKT, Next: FnMut(&mut State) -> Option<Feed<'_, Item>>,
{ pub state: State, pub next: Next, pub _phantom: PhantomData<fn(_: &mut State) -> Option<Feed<'_, Item>>>, }
Expand description

The impl LendingIterator returned by from_fn().

§Example

  • use ::lending_iterator::prelude::*;
    
    struct Person {
        name: String,
        age: u8,
    }
    
    fn example (person: &mut Person)
      -> impl '_ + LendingIterator
    /* or:
      -> impl '_ + LendingIteratorDyn<Item = HKT!(&str)>
     */
    {
        lending_iterator::FromFn::<HKT!(&str), _, _> {
            state: person,
            next: |p| if p.age > 0 {
                Some(&p.name)
            } else {
                None
            },
            _phantom: <_>::default(),
        }
    }

Fields§

§state: State

The state owned by this LendingIterator.

  • Think of Self within a manual implementation of the trait;

  • Think of repeat_mut().

§next: Next

The “fn next()” of a “manual implementation of the trait”.

Trick: since it’s only required to be a closure, this Next closure can capture state on its own, provided it does not need to lend from it.

This can lead to slightly more lightweight FromFn / from_fn calls:

  • put the lent / borrowed state inside .state,
  • let the rest of the state be implicitly move-captured by this closure.
§_phantom: PhantomData<fn(_: &mut State) -> Option<Feed<'_, Item>>>

The signature of fn next in a PhantomData.

Trait Implementations§

Source§

impl<'next, Item, State, Next> LendingIteratorඞItem<'next> for FromFn<Item, State, Next>
where Item: HKT, Next: FnMut(&mut State) -> Option<Feed<'_, Item>>,

Source§

type T = <Item as WithLifetime<'next>>::T

The “output” of this whole hand-rolled GAT: think of LendingIteratorඞItem<'lt>::T as of LendingIterator::Item<'lt>. Read more
Source§

impl<Item, State, Next> LendingIterator for FromFn<Item, State, Next>
where Item: HKT, Next: FnMut(&mut State) -> Option<Feed<'_, Item>>,

Source§

fn next(self: &mut FromFn<Item, State, Next>) -> Option<Feed<'_, Item>>

Query the next() Item of this Self iterator. Read more
Source§

fn filter<F>(self, should_yield: F) -> Filter<Self, F>
where Self: Sized, F: FnMut(&Item<'_, Self>) -> bool,

Source§

fn for_each(self, f: impl FnMut(Item<'_, Self>))
where Self: Sized,

Source§

fn fold<Acc>(self, acc: Acc, f: impl FnMut(Acc, Item<'_, Self>) -> Acc) -> Acc
where Self: Sized,

Source§

fn try_for_each<Err>( &mut self, f: impl FnMut(Item<'_, Self>) -> Result<(), Err>, ) -> Result<(), Err>

Source§

fn try_fold<Acc, Err>( &mut self, acc: Acc, f: impl FnMut(Acc, Item<'_, Self>) -> Result<Acc, Err>, ) -> Result<Acc, Err>

Source§

fn all(&mut self, predicate: impl FnMut(Item<'_, Self>) -> bool) -> bool
where Self: Sized,

Source§

fn any(&mut self, predicate: impl FnMut(Item<'_, Self>) -> bool) -> bool
where Self: Sized,

Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Source§

fn count(self) -> usize
where Self: Sized,

Source§

fn find<'find>( &'find mut self, predicate: impl 'find + FnMut(&Item<'_, Self>) -> bool, ) -> Option<Item<'find, Self>>
where Self: Sized,

Source§

fn fuse(self) -> Fuse<Self>
where Self: Sized,

Source§

fn nth(&mut self, n: usize) -> Option<Item<'_, Self>>

Source§

fn position<F>( &mut self, predicate: impl FnMut(Item<'_, Self>) -> bool, ) -> Option<usize>
where Self: Sized,

Source§

fn skip(self, count: usize) -> Skip<Self>
where Self: Sized,

Source§

fn take(self, count: usize) -> Take<Self>
where Self: Sized,

Source§

fn map<NewItemType: HKT, F>(self, f: F) -> Map<Self, F, NewItemType>
where for<'next> F: FnMut([&'next Self; 0], Item<'next, Self>) -> Feed<'next, NewItemType>, Self: Sized,

Source§

fn map_to_ref<R: ?Sized, F>(self, f: F) -> Map<Self, F, HKTRef<R>>
where for<'any> F: FnMut([&'any Self; 0], Item<'any, Self>) -> &'any R, Self: Sized,

Convenience method: same as .map(), but for hard-coding the HKT parameter to HKTRef<R> = HKT!(&R). Read more
Source§

fn map_to_mut<R: ?Sized, F>(self, f: F) -> Map<Self, F, HKTRefMut<R>>
where for<'any> F: FnMut([&'any Self; 0], Item<'any, Self>) -> &'any mut R, Self: Sized,

Convenience method: same as .map(), but for hard-coding the HKT parameter to HKTRefMut<R> = HKT!(&mut R). Read more
Source§

fn map_into_iter<F, NonLendingItem>(self, f: F) -> MapIntoIter<Self, F>
where F: FnMut(Item<'_, Self>) -> NonLendingItem, Self: Sized,

Convenience shorthand for .map…(…).into_iter(). Read more
Source§

fn filter_map<NewItemType: HKT, F>( self, f: F, ) -> FilterMap<Self, F, NewItemType>
where for<'next> F: FnMut([&'next Self; 0], Item<'next, Self>) -> Option<Feed<'next, NewItemType>>, Self: Sized,

Source§

fn filter_map_to_ref<R: ?Sized, F>(self, f: F) -> FilterMap<Self, F, HKTRef<R>>
where for<'any> F: FnMut([&'any Self; 0], Item<'any, Self>) -> Option<&'any R>, Self: Sized,

Convenience method: same as .filter_map(), but for hard-coding the HKT parameter to HKTRef<R> = HKT!(&R). Read more
Source§

fn filter_map_to_mut<R: ?Sized, F>( self, f: F, ) -> FilterMap<Self, F, HKTRefMut<R>>
where for<'any> F: FnMut([&'any Self; 0], Item<'any, Self>) -> Option<&'any mut R>, Self: Sized,

Convenience method: same as .filter_map(), but for hard-coding the HKT parameter to HKTRefMut<R> = HKT!(&mut R). Read more
Source§

fn filter_map_into_iter<F, NonLendingItem>( self, f: F, ) -> FilterMapIntoIter<Self, F>
where F: FnMut(Item<'_, Self>) -> Option<NonLendingItem>, Self: Sized,

Convenience shorthand for .filter_map…(…).into_iter(). Read more
Source§

fn into_iter<Item>(self) -> IntoIter<Self>
where Self: for<'any> LendingIteratorඞItem<'any, T = Item> + Sized,

Convert a Self : LendingIterator into an Iterator, provided Self::Item<'_> does not depend on '_.
Source§

fn dyn_boxed<'usability>( self, ) -> Box<dyn LendingIteratorDyn<Item = HKTItem<Self>> + 'usability>
where Self: 'usability + Sized,

Available on crate feature alloc only.
Converts this LendingIterator into a Box<dyn LendingIteratorDyn…>. Read more
Source§

fn dyn_boxed_auto<BoxedDynLendingIterator, Item: HKT>( self, ) -> BoxedDynLendingIterator
where Self: Sized + DynCoerce<BoxedDynLendingIterator, Item>,

Available on crate feature alloc only.
Converts this LendingIterator into a Box<dyn LendingIteratorDyn…>. Read more

Auto Trait Implementations§

§

impl<Item, State, Next> Freeze for FromFn<Item, State, Next>
where State: Freeze, Next: Freeze,

§

impl<Item, State, Next> RefUnwindSafe for FromFn<Item, State, Next>
where State: RefUnwindSafe, Next: RefUnwindSafe,

§

impl<Item, State, Next> Send for FromFn<Item, State, Next>
where State: Send, Next: Send,

§

impl<Item, State, Next> Sync for FromFn<Item, State, Next>
where State: Sync, Next: Sync,

§

impl<Item, State, Next> Unpin for FromFn<Item, State, Next>
where State: Unpin, Next: Unpin,

§

impl<Item, State, Next> UnwindSafe for FromFn<Item, State, Next>
where State: UnwindSafe, Next: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> LendingIteratorDyn for T
where T: LendingIterator,

Source§

type Item = HKT<dyn for<'ඞ> WithLifetime<'ඞ, T = <T as LendingIteratorඞItem<'ඞ>>::T>>

Another approach to a GAT in stable Rust: use a classic associated type, but with a HKT bound on it, so that it can still be fed a lifetime parameter.
Source§

fn dyn_next<'n>( &'n mut self, ) -> Option<<HKT<dyn for<'ඞ> WithLifetime<'ඞ, T = <T as LendingIteratorඞItem<'ඞ>>::T>> as WithLifetime<'n>>::T>

A dyn-safe version of LendingIterator::next(), using [Self::Item]. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.