Skip to content

Commit 1f556f8

Browse files
authored
Merge pull request #3 from CertainLach/master
Update to latest nightly rust
2 parents f3c2723 + 8bd2164 commit 1f556f8

File tree

1 file changed

+23
-29
lines changed

1 file changed

+23
-29
lines changed

src/lib.rs

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77
//! #![feature(generators)]
88
//! #![feature(conservative_impl_trait)]
99
//!
10-
//! extern crate gen_iter;
11-
//! use gen_iter::GenIter;
10+
//! use gen_iter::gen_iter;
1211
//!
1312
//! fn fibonacci() -> impl Iterator<Item = u64> {
14-
//! GenIter(|| {
13+
//! gen_iter!({
1514
//! let mut a = 0;
1615
//! let mut b = 1;
1716
//!
@@ -25,10 +24,8 @@
2524
//! })
2625
//! }
2726
//!
28-
//! fn main() {
29-
//! for elem in fibonacci().map(|x| 2 * x).take(10) {
30-
//! println!("{}", elem);
31-
//! }
27+
//! for elem in fibonacci().map(|x| 2 * x).take(10) {
28+
//! println!("{}", elem);
3229
//! }
3330
//! ```
3431
//!
@@ -38,23 +35,25 @@
3835

3936
use std::ops::{Generator, GeneratorState};
4037
use std::iter::Iterator;
38+
use std::marker::Unpin;
39+
use std::pin::Pin;
4140

4241
/// a iterator that holds an internal generator representing
4342
/// the iteration state
4443
#[derive(Copy, Clone, Debug)]
4544
pub struct GenIter<T>(pub T)
4645
where
47-
T: Generator<Return = ()>;
46+
T: Generator<Return = ()> + Unpin;
4847

4948
impl<T> Iterator for GenIter<T>
5049
where
51-
T: Generator<Return = ()>,
50+
T: Generator<Return = ()> + Unpin,
5251
{
5352
type Item = T::Yield;
5453

5554
#[inline]
5655
fn next(&mut self) -> Option<Self::Item> {
57-
match self.0.resume() {
56+
match Pin::new(&mut self.0).resume(()) {
5857
GeneratorState::Yielded(n) => Some(n),
5958
GeneratorState::Complete(()) => None,
6059
}
@@ -63,7 +62,7 @@ where
6362

6463
impl<G> From<G> for GenIter<G>
6564
where
66-
G: Generator<Return = ()>,
65+
G: Generator<Return = ()> + Unpin,
6766
{
6867
#[inline]
6968
fn from(gen: G) -> Self {
@@ -75,29 +74,24 @@ where
7574
/// macro to simplify iterator - via - generator construction
7675
///
7776
/// ```
78-
/// # #![feature(generators)];
79-
/// # #[macro_use]
80-
/// # extern crate gen_iter;
81-
/// # fn main() {
82-
/// let mut g = gen_iter! {
77+
/// #![feature(generators)]
78+
///
79+
/// use gen_iter::gen_iter;
80+
///
81+
/// let mut g = gen_iter!({
8382
/// yield 1;
8483
/// yield 2;
85-
/// };
86-
///
84+
/// });
8785
///
8886
/// assert_eq!(g.next(), Some(1));
8987
/// assert_eq!(g.next(), Some(2));
9088
/// assert_eq!(g.next(), None);
9189
///
92-
///
93-
/// # }
9490
/// ```
9591
#[macro_export]
9692
macro_rules! gen_iter {
97-
($($exp:tt)*) => {
98-
$crate::GenIter(|| {
99-
$($exp)*
100-
})
93+
($block: block) => {
94+
$crate::GenIter(|| $block)
10195
}
10296
}
10397

@@ -108,7 +102,7 @@ mod tests {
108102

109103
#[test]
110104
fn it_works() {
111-
let mut g = GenIter(|| {
105+
let mut g = gen_iter!({
112106
yield 1;
113107
yield 2;
114108
});
@@ -120,10 +114,10 @@ mod tests {
120114

121115
#[test]
122116
fn into_gen_iter() {
123-
let mut g: GenIter<_> = (|| {
117+
let mut g: GenIter<_> = gen_iter!({
124118
yield 1;
125119
yield 2;
126-
}).into();
120+
});
127121

128122
assert_eq!(g.next(), Some(1));
129123
assert_eq!(g.next(), Some(2));
@@ -132,10 +126,10 @@ mod tests {
132126

133127
#[test]
134128
fn gen_iter_macro() {
135-
let mut g = gen_iter!{
129+
let mut g = gen_iter!({
136130
yield 1;
137131
yield 2;
138-
};
132+
});
139133

140134
assert_eq!(g.next(), Some(1));
141135
assert_eq!(g.next(), Some(2));

0 commit comments

Comments
 (0)