lender/traits/ext.rs
1use fallible_iterator::{FallibleIterator, IntoFallibleIterator};
2
3use crate::{
4 FromFallibleIter, FromFallibleIterRef, FromIntoFallibleIter, FromIntoIter, FromIter,
5 FromIterRef,
6};
7
8/// Extension trait adding to [`Iterator`] the method
9/// [`into_lender`](IteratorExt::into_lender), which turns an [`Iterator`]
10/// into a [`Lender`](crate::Lender) without allocation.
11pub trait IteratorExt<I: Iterator> {
12 /// Turn this [`Iterator`] into a [`Lender`](crate::Lender) without
13 /// allocation.
14 ///
15 /// This method is a convenient entry point for
16 /// [`from_iter`](crate::from_iter).
17 fn into_lender(self) -> FromIter<I>;
18}
19
20impl<I: Iterator> IteratorExt<I> for I {
21 #[inline(always)]
22 fn into_lender(self) -> FromIter<I> {
23 crate::from_iter(self)
24 }
25}
26
27/// Extension trait adding to [`IntoIterator`] the method
28/// [`into_into_lender`](IntoIteratorExt::into_into_lender), which turns an
29/// [`IntoIterator`] into an [`IntoLender`](crate::IntoLender) without
30/// allocation.
31pub trait IntoIteratorExt<I: IntoIterator> {
32 /// Turn this [`IntoIterator`] into an [`IntoLender`](crate::IntoLender)
33 /// without allocation.
34 ///
35 /// This method is a convenient entry point for
36 /// [`from_into_iter`](crate::from_into_iter).
37 fn into_into_lender(self) -> FromIntoIter<I>;
38}
39
40impl<I: IntoIterator> IntoIteratorExt<I> for I {
41 #[inline(always)]
42 fn into_into_lender(self) -> FromIntoIter<I> {
43 crate::from_into_iter(self)
44 }
45}
46
47/// Extension trait adding to [`FallibleIterator`] the method
48/// [`into_fallible_lender`](FallibleIteratorExt::into_fallible_lender), which
49/// turns a [`FallibleIterator`] into a
50/// [`FallibleLender`](crate::FallibleLender) without allocation.
51pub trait FallibleIteratorExt<I: FallibleIterator> {
52 /// Turn this [`FallibleIterator`] into a
53 /// [`FallibleLender`](crate::FallibleLender) without allocation.
54 ///
55 /// This method is a convenient entry point for
56 /// [`from_fallible_iter`](crate::from_fallible_iter).
57 fn into_fallible_lender(self) -> FromFallibleIter<I>;
58}
59
60impl<I: FallibleIterator> FallibleIteratorExt<I> for I {
61 #[inline(always)]
62 fn into_fallible_lender(self) -> FromFallibleIter<I> {
63 crate::from_fallible_iter(self)
64 }
65}
66
67/// Extension trait adding to [`IntoFallibleIterator`] the method
68/// [`into_into_fallible_lender`][1], which turns an
69/// [`IntoFallibleIterator`] into an [`IntoFallibleLender`] without
70/// allocation.
71///
72/// [1]: IntoFallibleIteratorExt::into_into_fallible_lender
73/// [`IntoFallibleLender`]: crate::IntoFallibleLender
74pub trait IntoFallibleIteratorExt<I: IntoFallibleIterator> {
75 /// Turn this [`IntoFallibleIterator`] into an
76 /// [`IntoFallibleLender`](crate::IntoFallibleLender) without allocation.
77 ///
78 /// This method is a convenient entry point for
79 /// [`from_into_fallible_iter`](crate::from_into_fallible_iter).
80 fn into_into_fallible_lender(self) -> FromIntoFallibleIter<I>;
81}
82
83impl<I: IntoFallibleIterator> IntoFallibleIteratorExt<I> for I {
84 #[inline(always)]
85 fn into_into_fallible_lender(self) -> FromIntoFallibleIter<I> {
86 crate::from_into_fallible_iter(self)
87 }
88}
89
90/// Extension trait adding to [`Iterator`] the method
91/// [`into_ref_lender`](IteratorRefExt::into_ref_lender),
92/// which turns an `Iterator<Item = T>` into a
93/// [`Lender`](crate::Lender) with `Lend<'lend> = &'lend T`.
94pub trait IteratorRefExt<I: Iterator> {
95 /// Turn this [`Iterator`] into a [`Lender`](crate::Lender)
96 /// that stores each element and lends a reference to it.
97 ///
98 /// This method is a convenient entry point for
99 /// [`from_iter_ref`](crate::from_iter_ref).
100 fn into_ref_lender(self) -> FromIterRef<I>;
101}
102
103impl<I: Iterator> IteratorRefExt<I> for I {
104 #[inline(always)]
105 fn into_ref_lender(self) -> FromIterRef<I> {
106 crate::from_iter_ref(self)
107 }
108}
109
110/// Extension trait adding to [`FallibleIterator`] the method
111/// [`into_fallible_ref_lender`](FallibleIteratorRefExt::into_fallible_ref_lender),
112/// which turns a `FallibleIterator<Item = T>` into a
113/// [`FallibleLender`](crate::FallibleLender) with `FallibleLend<'lend> = &'lend
114/// T`.
115pub trait FallibleIteratorRefExt<I: FallibleIterator> {
116 /// Turn this [`FallibleIterator`] into a
117 /// [`FallibleLender`](crate::FallibleLender) that stores
118 /// each element and lends a reference to it.
119 ///
120 /// This method is a convenient entry point for
121 /// [`from_fallible_iter_ref`](crate::from_fallible_iter_ref).
122 fn into_fallible_ref_lender(self) -> FromFallibleIterRef<I>;
123}
124
125impl<I: FallibleIterator> FallibleIteratorRefExt<I> for I {
126 #[inline(always)]
127 fn into_fallible_ref_lender(self) -> FromFallibleIterRef<I> {
128 crate::from_fallible_iter_ref(self)
129 }
130}