newer_type_std/
iter.rs

1use crate::emit_traits;
2use newer_type::target;
3
4emit_traits! {
5    #[implement_of(newer_type_std::iter::IntoIterator)]
6    #[slot(Vec<u8>)]
7    #[target(alternative = ::core::iter::IntoIterator)]
8    pub trait IntoIterator {
9        type Item;
10        type IntoIter: ::core::iter::Iterator<Item = Self::Item>;
11        fn into_iter(self) -> Self::IntoIter;
12    }
13
14    #[implement_of(for<A> newer_type_std::iter::Extend<A>)]
15    #[slot(Vec<u8>)]
16    #[target(alternative = ::core::iter::Extend)]
17    pub trait Extend[A] {
18        fn extend<T>(&mut self, iter: T)
19        where
20            T: ::core::iter::IntoIterator<Item = A>;
21    }
22
23    #[implement_of(newer_type_std::iter::Iterator)]
24    #[slot(std::vec::IntoIter<u8>)]
25    #[target(alternative = ::core::iter::Iterator)]
26    pub trait Iterator {
27        type Item;
28        fn next(&mut self) -> ::core::option::Option<Self::Item>;
29        fn size_hint(
30            &self,
31        ) -> (
32        ::core::primitive::usize,
33        ::core::option::Option<::core::primitive::usize>,
34        );
35        fn count(self) -> ::core::primitive::usize
36        where
37            Self: ::core::marker::Sized;
38        fn last(self) -> ::core::option::Option<Self::Item>
39        where
40            Self: ::core::marker::Sized;
41        fn nth(&mut self, n: ::core::primitive::usize) -> ::core::option::Option<Self::Item>;
42    }
43
44    #[implement_of(newer_type_std::iter::Iterator, newer_type_std::iter::FusedIterator)]
45    #[slot(std::vec::IntoIter<u8>)]
46    #[target(alternative = ::core::iter::FusedIterator)]
47    pub trait FusedIterator: [::core::iter::Iterator] {}
48
49
50    #[implement_of(newer_type_std::iter::Iterator, newer_type_std::iter::ExactSizeIterator)]
51    #[slot(std::vec::IntoIter<u8>)]
52    #[target(alternative = ::core::iter::ExactSizeIterator)]
53    pub trait ExactSizeIterator: [::core::iter::Iterator] {
54        fn len(&self) -> ::core::primitive::usize;
55    }
56
57
58    #[implement_of(newer_type_std::iter::Iterator, newer_type_std::iter::DoubleEndedIterator)]
59    #[slot(std::vec::IntoIter<u8>)]
60    #[target(alternative = ::core::iter::DoubleEndedIterator)]
61    pub trait DoubleEndedIterator: [::core::iter::Iterator] {
62        fn next_back(&mut self) -> ::core::option::Option<Self::Item>;
63
64        fn nth_back(
65            &mut self,
66            n: ::core::primitive::usize,
67        ) -> ::core::option::Option<Self::Item>;
68        // fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R
69        // where
70        //     Self: ::core::marker::Sized,
71        //     F: ::core::ops::FnMut(B, Self::Item) -> R,
72        //     R: ::core::ops::Try<Output = B>;
73        fn rfold<B, F>(self, init: B, f: F) -> B
74        where
75            Self: ::core::marker::Sized,
76            F: ::core::ops::FnMut(B, Self::Item) -> B;
77        fn rfind<P>(&mut self, predicate: P) -> ::core::option::Option<Self::Item>
78        where
79            Self: ::core::marker::Sized,
80            P: ::core::ops::FnMut(&Self::Item) -> ::core::primitive::bool;
81    }
82}