@@ -4,8 +4,8 @@ use futures::sync::{mpsc, oneshot};
4
4
use common:: Never ;
5
5
use super :: cancel:: { Cancel , Canceled } ;
6
6
7
- pub type Callback < U > = oneshot:: Sender < :: Result < U > > ;
8
- pub type Promise < U > = oneshot:: Receiver < :: Result < U > > ;
7
+ pub type Callback < T , U > = oneshot:: Sender < Result < U , ( :: Error , Option < T > ) > > ;
8
+ pub type Promise < T , U > = oneshot:: Receiver < Result < U , ( :: Error , Option < T > ) > > ;
9
9
10
10
pub fn channel < T , U > ( ) -> ( Sender < T , U > , Receiver < T , U > ) {
11
11
let ( tx, rx) = mpsc:: unbounded ( ) ;
@@ -23,7 +23,7 @@ pub fn channel<T, U>() -> (Sender<T, U>, Receiver<T, U>) {
23
23
24
24
pub struct Sender < T , U > {
25
25
cancel : Cancel ,
26
- inner : mpsc:: UnboundedSender < ( T , Callback < U > ) > ,
26
+ inner : mpsc:: UnboundedSender < ( T , Callback < T , U > ) > ,
27
27
}
28
28
29
29
impl < T , U > Sender < T , U > {
@@ -35,7 +35,7 @@ impl<T, U> Sender<T, U> {
35
35
self . cancel . cancel ( ) ;
36
36
}
37
37
38
- pub fn send ( & self , val : T ) -> Result < Promise < U > , T > {
38
+ pub fn send ( & self , val : T ) -> Result < Promise < T , U > , T > {
39
39
let ( tx, rx) = oneshot:: channel ( ) ;
40
40
self . inner . unbounded_send ( ( val, tx) )
41
41
. map ( move |_| rx)
@@ -54,11 +54,11 @@ impl<T, U> Clone for Sender<T, U> {
54
54
55
55
pub struct Receiver < T , U > {
56
56
canceled : Canceled ,
57
- inner : mpsc:: UnboundedReceiver < ( T , Callback < U > ) > ,
57
+ inner : mpsc:: UnboundedReceiver < ( T , Callback < T , U > ) > ,
58
58
}
59
59
60
60
impl < T , U > Stream for Receiver < T , U > {
61
- type Item = ( T , Callback < U > ) ;
61
+ type Item = ( T , Callback < T , U > ) ;
62
62
type Error = Never ;
63
63
64
64
fn poll ( & mut self ) -> Poll < Option < Self :: Item > , Self :: Error > {
@@ -83,9 +83,9 @@ impl<T, U> Drop for Receiver<T, U> {
83
83
// - Ready(None): the end. we want to stop looping
84
84
// - NotReady: unreachable
85
85
// - Err: unreachable
86
- while let Ok ( Async :: Ready ( Some ( ( _val , cb) ) ) ) = self . inner . poll ( ) {
86
+ while let Ok ( Async :: Ready ( Some ( ( val , cb) ) ) ) = self . inner . poll ( ) {
87
87
// maybe in future, we pass the value along with the error?
88
- let _ = cb. send ( Err ( :: Error :: new_canceled ( None ) ) ) ;
88
+ let _ = cb. send ( Err ( ( :: Error :: new_canceled ( None ) , Some ( val ) ) ) ) ;
89
89
}
90
90
}
91
91
0 commit comments