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}