#![feature(futures_api,async_await,await_macro, pin, arbitrary_self_types)]
extern crate futures;
extern crate fahrenheit;
use futures::stream::{StreamExt};
use futures::channel::mpsc;
use futures::future::Future;
use futures::task::Poll;
use futures::task::Context;
use std::pin::PinMut;
async fn comsumer(mut rx:mpsc::UnboundedReceiver<i32>) {
while let Some(v) = await!(rx.next()) {
println!("recieved {}", v);
}
}
fn main() {
let (tx, rx) = mpsc::unbounded();
let prod = Producer {chan:tx, index:0};
fahrenheit::spawn(prod);
fahrenheit::run(comsumer(rx))
}
struct Producer {
chan : mpsc::UnboundedSender<i32>,
index : i32,
}
impl Future for Producer {
type Output = ();
fn poll(mut self : PinMut<Self>, cx: & mut Context) -> Poll<Self::Output> {
self.chan.unbounded_send(self.index).unwrap();
self.index += 1;
if self.index == 1000 {
Poll::Ready(())
} else {
cx.waker().wake();
Poll::Pending
}
}
}
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::print
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: std::panicking::default_hook::{{closure}}
at libstd/panicking.rs:211
3: std::panicking::default_hook
at libstd/panicking.rs:227
4: std::panicking::rust_panic_with_hook
at libstd/panicking.rs:477
5: std::panicking::continue_panic_fmt
at libstd/panicking.rs:391
6: rust_begin_unwind
at libstd/panicking.rs:326
7: core::panicking::panic_fmt
at libcore/panicking.rs:77
8: core::result::unwrap_failed
at /checkout/src/libcore/macros.rs:26
9: <core::result::Result<T, E>>::expect
at /checkout/src/libcore/result.rs:809
10: <core::cell::RefCell<T>>::borrow_mut
at /checkout/src/libcore/cell.rs:885
11: fahrenheit::EventLoop::wake
at src/lib.rs:157
12: <fahrenheit::Token as alloc::task::if_arc::Wake>::wake::{{closure}}
at src/lib.rs:63
13: <std::thread::local::LocalKey<T>>::try_with
at /checkout/src/libstd/thread/local.rs:294
14: <std::thread::local::LocalKey<T>>::with
at /checkout/src/libstd/thread/local.rs:248
15: <fahrenheit::Token as alloc::task::if_arc::Wake>::wake
at src/lib.rs:58
16: <alloc::task::if_arc::ArcWrapped<T> as core::task::wake::UnsafeWake>::wake
at /checkout/src/liballoc/task.rs:71
17: core::task::wake::Waker::wake
at /checkout/src/libcore/task/wake.rs:51
18: <futures_channel::mpsc::Sender<T>>::signal
at /mnt/f/.cargo/git/checkouts/futures-rs-4ca77cb4f4f05ac4/1baf8a0/futures-channel/src/mpsc/mod.rs:615
19: <futures_channel::mpsc::Sender<T>>::queue_push_and_signal
at /mnt/f/.cargo/git/checkouts/futures-rs-4ca77cb4f4f05ac4/1baf8a0/futures-channel/src/mpsc/mod.rs:544
20: <futures_channel::mpsc::Sender<T>>::do_send_nb
at /mnt/f/.cargo/git/checkouts/futures-rs-4ca77cb4f4f05ac4/1baf8a0/futures-channel/src/mpsc/mod.rs:520
21: <futures_channel::mpsc::UnboundedSender<T>>::unbounded_send
at /mnt/f/.cargo/git/checkouts/futures-rs-4ca77cb4f4f05ac4/1baf8a0/futures-channel/src/mpsc/mod.rs:745
22: <haha::Producer as core::future::future::Future>::poll
at examples/haha.rs:36
23: <alloc::boxed::Box<F> as core::future::future_obj::UnsafeFutureObj<'a, T>>::poll
at /checkout/src/liballoc/boxed.rs:783
24: <core::future::future_obj::LocalFutureObj<'a, T> as core::future::future::Future>::poll
at /checkout/src/libcore/future/future_obj.rs:83
25: <core::future::future_obj::FutureObj<'a, T> as core::future::future::Future>::poll
at /checkout/src/libcore/future/future_obj.rs:133
26: fahrenheit::Task::poll
at src/lib.rs:87
27: fahrenheit::EventLoop::run
at ./src/lib.rs:272
28: fahrenheit::run::{{closure}}
at ./src/lib.rs:39
29: <std::thread::local::LocalKey<T>>::try_with
at /checkout/src/libstd/thread/local.rs:294
30: <std::thread::local::LocalKey<T>>::with
at /checkout/src/libstd/thread/local.rs:248
31: fahrenheit::run
at ./src/lib.rs:39
32: haha::main
at examples/haha.rs:23
33: std::rt::lang_start::{{closure}}
at /checkout/src/libstd/rt.rs:74
34: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:310
35: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:103
36: std::rt::lang_start_internal
at libstd/panicking.rs:289
at libstd/panic.rs:392
at libstd/rt.rs:58
37: std::rt::lang_start
at /checkout/src/libstd/rt.rs:74
38: main
39: __libc_start_main
40: <unknown>
code
stack backtrace: