Coverage Report

Created: 2026-10-28 06:37

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.14.2/src/macros.rs
Line
Count
Source
1
/// Create an [`IndexMap`][crate::IndexMap] from a list of key-value pairs
2
/// and a [`BuildHasherDefault`][core::hash::BuildHasherDefault]-wrapped custom hasher.
3
///
4
/// ## Example
5
///
6
/// ```
7
/// use indexmap::indexmap_with_default;
8
/// use fnv::FnvHasher;
9
///
10
/// let map = indexmap_with_default!{
11
///     FnvHasher;
12
///     "a" => 1,
13
///     "b" => 2,
14
/// };
15
/// assert_eq!(map["a"], 1);
16
/// assert_eq!(map["b"], 2);
17
/// assert_eq!(map.get("c"), None);
18
///
19
/// // "a" is the first key
20
/// assert_eq!(map.keys().next(), Some(&"a"));
21
/// ```
22
///
23
/// This can also be initialized in `const` contexts:
24
///
25
/// ```
26
/// use indexmap::{IndexMap, indexmap_with_default};
27
/// use fnv::FnvBuildHasher; // = BuildHasherDefault<FnvHasher>
28
/// use std::sync::Mutex;
29
///
30
/// static GLOBAL: Mutex<IndexMap<String, i32, FnvBuildHasher>> =
31
///     Mutex::new(indexmap_with_default!());
32
///
33
/// if let Ok(mut map) = GLOBAL.lock() {
34
///     map.insert("a".into(), 1);
35
///     map.insert("b".into(), 2);
36
/// }
37
///
38
/// assert_eq!(GLOBAL.lock().unwrap()["a"], 1);
39
/// assert_eq!(GLOBAL.lock().unwrap()["b"], 2);
40
/// ```
41
#[macro_export]
42
macro_rules! indexmap_with_default {
43
    () => { const {
44
        $crate::IndexMap::with_hasher(
45
            // Let type inference figure out the hasher:
46
            ::core::hash::BuildHasherDefault::new(),
47
        )
48
    }};
49
    ($H:ty $(;)?) => { const {
50
        $crate::IndexMap::with_hasher(
51
            // Specify your custom `H` (must implement Default + Hasher) as the hasher:
52
            ::core::hash::BuildHasherDefault::<$H>::new(),
53
        )
54
    }};
55
    ($H:ty; $($key:expr => $value:expr),+ $(,)?) => {{
56
        let mut map = $crate::IndexMap::with_capacity_and_hasher(
57
            // Note: `stringify!($key)` is just here to consume the repetition,
58
            // but we throw away that string literal during constant evaluation.
59
            const { <[()]>::len(&[$({ stringify!($key); }),*]) },
60
            // Specify your custom `H` (must implement Default + Hasher) as the hasher:
61
            ::core::hash::BuildHasherDefault::<$H>::new(),
62
        );
63
        $(
64
            map.insert($key, $value);
65
        )+
66
        map
67
    }};
68
}
69
70
#[cfg(feature = "std")]
71
#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
72
#[macro_export]
73
/// Create an [`IndexMap`][crate::IndexMap] from a list of key-value pairs
74
///
75
/// ## Example
76
///
77
/// ```
78
/// use indexmap::indexmap;
79
///
80
/// let map = indexmap!{
81
///     "a" => 1,
82
///     "b" => 2,
83
/// };
84
/// assert_eq!(map["a"], 1);
85
/// assert_eq!(map["b"], 2);
86
/// assert_eq!(map.get("c"), None);
87
///
88
/// // "a" is the first key
89
/// assert_eq!(map.keys().next(), Some(&"a"));
90
/// ```
91
macro_rules! indexmap {
92
    () => { $crate::IndexMap::new() };
93
    ($($key:expr => $value:expr),+ $(,)?) => {{
94
        let mut map = $crate::IndexMap::with_capacity(
95
            // Note: `stringify!($key)` is just here to consume the repetition,
96
            // but we throw away that string literal during constant evaluation.
97
            const { <[()]>::len(&[$({ stringify!($key); }),*]) },
98
        );
99
        $(
100
            map.insert($key, $value);
101
        )+
102
        map
103
    }};
104
}
105
106
/// Create an [`IndexSet`][crate::IndexSet] from a list of values
107
/// and a [`BuildHasherDefault`][core::hash::BuildHasherDefault]-wrapped custom hasher.
108
///
109
/// ## Example
110
///
111
/// ```
112
/// use indexmap::indexset_with_default;
113
/// use fnv::FnvHasher;
114
///
115
/// let set = indexset_with_default!{
116
///     FnvHasher;
117
///     "a",
118
///     "b",
119
/// };
120
/// assert!(set.contains("a"));
121
/// assert!(set.contains("b"));
122
/// assert!(!set.contains("c"));
123
///
124
/// // "a" is the first value
125
/// assert_eq!(set.iter().next(), Some(&"a"));
126
/// ```
127
///
128
/// This can also be initialized in `const` contexts:
129
///
130
/// ```
131
/// use indexmap::{IndexSet, indexset_with_default};
132
/// use fnv::FnvBuildHasher; // = BuildHasherDefault<FnvHasher>
133
/// use std::sync::Mutex;
134
///
135
/// static INTERN: Mutex<IndexSet<String, FnvBuildHasher>> =
136
///     Mutex::new(indexset_with_default!());
137
///
138
/// if let Ok(mut set) = INTERN.lock() {
139
///     set.insert("a".into());
140
///     set.insert("b".into());
141
///     set.insert("c".into());
142
/// }
143
///
144
/// assert!(INTERN.lock().unwrap().contains("a"));
145
/// assert!(INTERN.lock().unwrap().contains("b"));
146
/// assert!(INTERN.lock().unwrap().contains("c"));
147
/// ```
148
#[macro_export]
149
macro_rules! indexset_with_default {
150
    () => { const {
151
        $crate::IndexSet::with_hasher(
152
            // Let type inference figure out the hasher:
153
            ::core::hash::BuildHasherDefault::new(),
154
        )
155
    }};
156
    ($H:ty $(;)?) => { const {
157
        $crate::IndexSet::with_hasher(
158
            // Specify your custom `H` (must implement Default + Hasher) as the hasher:
159
            ::core::hash::BuildHasherDefault::<$H>::new(),
160
        )
161
    }};
162
    ($H:ty; $($value:expr),+ $(,)?) => {{
163
        let mut set = $crate::IndexSet::with_capacity_and_hasher(
164
            // Note: `stringify!($value)` is just here to consume the repetition,
165
            // but we throw away that string literal during constant evaluation.
166
            const { <[()]>::len(&[$({ stringify!($value); }),*]) },
167
            // Specify your custom `H` (must implement Default + Hasher) as the hasher:
168
            ::core::hash::BuildHasherDefault::<$H>::new(),
169
        );
170
        $(
171
            set.insert($value);
172
        )+
173
        set
174
    }};
175
}
176
177
#[cfg(feature = "std")]
178
#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
179
#[macro_export]
180
/// Create an [`IndexSet`][crate::IndexSet] from a list of values
181
///
182
/// ## Example
183
///
184
/// ```
185
/// use indexmap::indexset;
186
///
187
/// let set = indexset!{
188
///     "a",
189
///     "b",
190
/// };
191
/// assert!(set.contains("a"));
192
/// assert!(set.contains("b"));
193
/// assert!(!set.contains("c"));
194
///
195
/// // "a" is the first value
196
/// assert_eq!(set.iter().next(), Some(&"a"));
197
/// ```
198
macro_rules! indexset {
199
    () => { $crate::IndexSet::new() };
200
    ($($value:expr),+ $(,)?) => {{
201
        let mut set = $crate::IndexSet::with_capacity(
202
            // Note: `stringify!($value)` is just here to consume the repetition,
203
            // but we throw away that string literal during constant evaluation.
204
            const { <[()]>::len(&[$({ stringify!($value); }),*]) },
205
        );
206
        $(
207
            set.insert($value);
208
        )+
209
        set
210
    }};
211
}
212
213
// generate all the Iterator methods by just forwarding to the underlying
214
// self.iter and mapping its element.
215
macro_rules! iterator_methods {
216
    // $map_elt is the mapping function from the underlying iterator's element
217
    // same mapping function for both options and iterators
218
    ($map_elt:expr) => {
219
45
        fn next(&mut self) -> Option<Self::Item> {
220
45
            self.iter.next().map($map_elt)
221
45
        }
Unexecuted instantiation: <indexmap::map::iter::Iter<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::iterator::Iterator>::next
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::next
<indexmap::map::iter::Iter<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::next
Line
Count
Source
219
31
        fn next(&mut self) -> Option<Self::Item> {
220
31
            self.iter.next().map($map_elt)
221
31
        }
Unexecuted instantiation: <indexmap::map::iter::IterMut<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::next
<indexmap::map::iter::IterMut2<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::next
Line
Count
Source
219
14
        fn next(&mut self) -> Option<Self::Item> {
220
14
            self.iter.next().map($map_elt)
221
14
        }
Unexecuted instantiation: <indexmap::map::iter::IntoIter<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::next
222
223
0
        fn size_hint(&self) -> (usize, Option<usize>) {
224
0
            self.iter.size_hint()
225
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::Iter<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IterMut2<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::size_hint
Unexecuted instantiation: <indexmap::map::iter::IntoIter<toml_edit::key::Key, toml_edit::item::Item> as core::iter::traits::iterator::Iterator>::size_hint
226
227
0
        fn count(self) -> usize {
228
0
            self.iter.len()
229
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::iterator::Iterator>::count
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::iterator::Iterator>::count
230
231
0
        fn nth(&mut self, n: usize) -> Option<Self::Item> {
232
0
            self.iter.nth(n).map($map_elt)
233
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::iterator::Iterator>::nth
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::iterator::Iterator>::nth
234
235
0
        fn last(mut self) -> Option<Self::Item> {
236
0
            self.next_back()
237
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::iterator::Iterator>::last
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::iterator::Iterator>::last
238
239
0
        fn collect<C>(self) -> C
240
0
        where
241
0
            C: FromIterator<Self::Item>,
242
        {
243
            // NB: forwarding this directly to standard iterators will
244
            // allow it to leverage unstable traits like `TrustedLen`.
245
0
            self.iter.map($map_elt).collect()
246
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::iterator::Iterator>::collect::<_>
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::iterator::Iterator>::collect::<_>
247
    };
248
}
249
250
macro_rules! double_ended_iterator_methods {
251
    // $map_elt is the mapping function from the underlying iterator's element
252
    // same mapping function for both options and iterators
253
    ($map_elt:expr) => {
254
0
        fn next_back(&mut self) -> Option<Self::Item> {
255
0
            self.iter.next_back().map($map_elt)
256
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back
257
258
0
        fn nth_back(&mut self, n: usize) -> Option<Self::Item> {
259
0
            self.iter.nth_back(n).map($map_elt)
260
0
        }
Unexecuted instantiation: <indexmap::map::iter::ValuesMut<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::IntoValues<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::Iter<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::Keys<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::IntoKeys<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::Values<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::IterMut<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::IterMut2<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::IntoIter<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::map::iter::Drain<_, _> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::set::iter::Iter<_> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::set::iter::IntoIter<_> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
Unexecuted instantiation: <indexmap::set::iter::Drain<_> as core::iter::traits::double_ended::DoubleEndedIterator>::nth_back
261
    };
262
}
263
264
// generate `ParallelIterator` methods by just forwarding to the underlying
265
// self.entries and mapping its elements.
266
#[cfg(feature = "rayon")]
267
macro_rules! parallel_iterator_methods {
268
    // $map_elt is the mapping function from the underlying iterator's element
269
    ($map_elt:expr) => {
270
        fn drive_unindexed<C>(self, consumer: C) -> C::Result
271
        where
272
            C: UnindexedConsumer<Self::Item>,
273
        {
274
            self.entries
275
                .into_par_iter()
276
                .map($map_elt)
277
                .drive_unindexed(consumer)
278
        }
279
280
        // NB: This allows indexed collection, e.g. directly into a `Vec`, but the
281
        // underlying iterator must really be indexed.  We should remove this if we
282
        // start having tombstones that must be filtered out.
283
        fn opt_len(&self) -> Option<usize> {
284
            Some(self.entries.len())
285
        }
286
    };
287
}
288
289
// generate `IndexedParallelIterator` methods by just forwarding to the underlying
290
// self.entries and mapping its elements.
291
#[cfg(feature = "rayon")]
292
macro_rules! indexed_parallel_iterator_methods {
293
    // $map_elt is the mapping function from the underlying iterator's element
294
    ($map_elt:expr) => {
295
        fn drive<C>(self, consumer: C) -> C::Result
296
        where
297
            C: Consumer<Self::Item>,
298
        {
299
            self.entries.into_par_iter().map($map_elt).drive(consumer)
300
        }
301
302
        fn len(&self) -> usize {
303
            self.entries.len()
304
        }
305
306
        fn with_producer<CB>(self, callback: CB) -> CB::Output
307
        where
308
            CB: ProducerCallback<Self::Item>,
309
        {
310
            self.entries
311
                .into_par_iter()
312
                .map($map_elt)
313
                .with_producer(callback)
314
        }
315
    };
316
}