Skip to content

Commit bc07168

Browse files
committed
Support arbitrary containers by IntoIterator blanket impl
1 parent 2f18cb3 commit bc07168

1 file changed

Lines changed: 10 additions & 26 deletions

File tree

src/runtime.rs

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@ pub mod ext {
4848
use super::RepInterp;
4949
use super::{HasIterator as HasIter, ThereIsNoIteratorInRepetition as DoesNotHaveIter};
5050
use crate::ToTokens;
51-
use core::slice;
52-
use std::collections::btree_set::{self, BTreeSet};
5351

5452
/// Extension trait providing the `quote_into_iter` method on iterators.
5553
pub trait RepIteratorExt: Iterator + Sized {
@@ -60,6 +58,16 @@ pub mod ext {
6058

6159
impl<T: Iterator> RepIteratorExt for T {}
6260

61+
/// Extension trait providing the `quote_into_iter` method on containers
62+
/// implementing IntoIterator.
63+
pub trait RepIntoIteratorExt: IntoIterator + Copy + Sized {
64+
fn quote_into_iter(self) -> (Self::IntoIter, HasIter) {
65+
(self.into_iter(), HasIter)
66+
}
67+
}
68+
69+
impl<T: IntoIterator + Copy> RepIntoIteratorExt for T {}
70+
6371
/// Extension trait providing the `quote_into_iter` method for
6472
/// non-iterable types. These types interpolate the same value in each
6573
/// iteration of the repetition.
@@ -102,30 +110,6 @@ pub mod ext {
102110
}
103111
}
104112

105-
impl<'q, T: 'q> RepAsIteratorExt<'q> for [T] {
106-
type Iter = slice::Iter<'q, T>;
107-
108-
fn quote_into_iter(&'q self) -> (Self::Iter, HasIter) {
109-
(self.iter(), HasIter)
110-
}
111-
}
112-
113-
impl<'q, T: 'q> RepAsIteratorExt<'q> for Vec<T> {
114-
type Iter = slice::Iter<'q, T>;
115-
116-
fn quote_into_iter(&'q self) -> (Self::Iter, HasIter) {
117-
(self.iter(), HasIter)
118-
}
119-
}
120-
121-
impl<'q, T: 'q> RepAsIteratorExt<'q> for BTreeSet<T> {
122-
type Iter = btree_set::Iter<'q, T>;
123-
124-
fn quote_into_iter(&'q self) -> (Self::Iter, HasIter) {
125-
(self.iter(), HasIter)
126-
}
127-
}
128-
129113
impl<'q, T: RepAsIteratorExt<'q>> RepAsIteratorExt<'q> for RepInterp<T> {
130114
type Iter = T::Iter;
131115

0 commit comments

Comments
 (0)