1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use super::*;

match_! {(
    from_fn,
    from_iter,
    #[apply(cfg_futures)]
    from_stream,
    repeat_mut,
    windows_mut_,
) {(
    $(
        $(#[$attrs:meta])*
        $module:ident
    ),* $(,)?
) => (
    $(
        $(#[$attrs])*
        pub use self::$module::*;
        $(#[$attrs])*
        pub(in crate)
        mod $module {
            use super::*;

            include!(concat!(stringify!($module), ".rs"));
        }
    )*
)}}

/// Extension trait based convenience method version of [`from_iter()`].
///
/// [`from_iter()`]: crate::from_iter()
#[extension(pub trait into_lending_iter)]
impl<I, IntoIter> I
where
    I : IntoIterator<IntoIter = IntoIter>,
    IntoIter : Iterator,
{
    /// Extension trait based convenience method version of [`from_iter()`].
    ///
    /// [`from_iter()`]: crate::from_iter()
    fn into_lending_iter (
        self,
    ) -> constructors::FromIter<IntoIter>
    {
        constructors::from_iter(self)
    }
}

/// Extension trait based convenience method version of [`windows_mut()`].
#[extension(pub trait windows_mut)]
impl<T> [T] {
    /// Extension trait based convenience method version of [`windows_mut()`].
    fn windows_mut<const WINDOW_SIZE: usize> (&mut self)
      -> constructors::WindowsMut<&mut [T], WINDOW_SIZE>
    {
        constructors::windows_mut(self)
    }
}