lender/traits/
ext.rs

1use fallible_iterator::{FallibleIterator, IntoFallibleIterator};
2
3use crate::{FromFallibleIter, FromIntoFallibleIter, FromIntoIter, FromIter};
4
5/// Extension trait adding to [`Iterator`] the method [`into_lender`](IteratorExt::into_lender),
6/// which turns an [`Iterator`] into a [`Lender`](crate::Lender) without allocation.
7pub trait IteratorExt<I: Iterator> {
8    /// Turn this [`Iterator`] into a [`Lender`](crate::Lender) without allocation.
9    ///
10    /// This method is a convenient entry point for [`from_iter`](crate::from_iter).
11    fn into_lender(self) -> FromIter<I>;
12}
13
14impl<I: Iterator> IteratorExt<I> for I {
15    fn into_lender(self) -> FromIter<I> {
16        crate::from_iter(self)
17    }
18}
19
20/// Extension trait adding to [`IntoIterator`] the method [`into_into_lender`](IntoIteratorExt::into_into_lender),
21/// which turns an [`IntoIterator`] into a [`IntoLender`](crate::IntoLender) without allocation.
22pub trait IntoIteratorExt<I: IntoIterator> {
23    /// Turn this [`IntoIterator`] into a [`IntoLender`](crate::IntoLender) without allocation.
24    ///
25    /// This method is a convenient entry point for [`from_into_iter`](crate::from_into_iter).
26    fn into_into_lender(self) -> FromIntoIter<I>;
27}
28
29impl<I: IntoIterator> IntoIteratorExt<I> for I {
30    fn into_into_lender(self) -> FromIntoIter<I> {
31        crate::from_into_iter(self)
32    }
33}
34
35/// Extension trait adding to [`FallibleIterator`] the method [`into_fallible_lender`](FallibleIteratorExt::into_fallible_lender),
36/// which turns a [`FallibleIterator`] into a [`FallibleLender`](crate::FallibleLender) without allocation.
37pub trait FallibleIteratorExt<I: FallibleIterator> {
38    /// Turn this [`FallibleIterator`] into a [`FallibleLender`](crate::FallibleLender) without allocation.
39    ///
40    /// This method is a convenient entry point for [`from_fallible_iter`](crate::from_fallible_iter).
41    fn into_fallible_lender(self) -> FromFallibleIter<I>;
42}
43
44impl<I: FallibleIterator> FallibleIteratorExt<I> for I {
45    fn into_fallible_lender(self) -> FromFallibleIter<I> {
46        crate::from_fallible_iter(self)
47    }
48}
49
50/// Extension trait adding to [`IntoFallibleIterator`] the method
51/// [`into_into_fallible_lender`](IntoFallibleIteratorExt::into_into_fallible_lender),
52/// which turns an [`IntoFallibleIterator`] into a
53/// [`IntoFallibleLender`](crate::IntoFallibleLender) without allocation.
54pub trait IntoFallibleIteratorExt<I: IntoFallibleIterator> {
55    /// Turn this [`IntoFallibleIterator`] into a
56    /// [`IntoFallibleLender`](crate::IntoFallibleLender) without allocation.
57    ///
58    /// This method is a convenient entry point for
59    /// [`from_into_fallible_iter`](crate::from_into_fallible_iter).
60    fn into_into_fallible_lender(self) -> FromIntoFallibleIter<I>;
61}
62
63impl<I: IntoFallibleIterator> IntoFallibleIteratorExt<I> for I {
64    fn into_into_fallible_lender(self) -> FromIntoFallibleIter<I> {
65        crate::from_into_fallible_iter(self)
66    }
67}