@@ -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