Guest User

Untitled

a guest
Jul 16th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. extern crate futures; // 0.1.21
  2.  
  3. use futures::{Async, AsyncSink, Poll, Stream, Sink, StartSend, IntoFuture};
  4. use futures::sync::mpsc::{Receiver, UnboundedSender};
  5.  
  6. struct Frame;
  7. struct Event;
  8. struct MyCodec;
  9.  
  10. struct Handler<S> {
  11. stream: S,
  12. tx: UnboundedSender<Event>,
  13. rx: Receiver<Frame>,
  14. }
  15.  
  16. impl Stream for MyCodec {
  17. type Item = Frame;
  18. type Error = ();
  19.  
  20. fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
  21. Ok(Async::Ready(None))
  22. }
  23. }
  24.  
  25. impl Sink for MyCodec {
  26. type SinkItem = Option<Frame>;
  27. type SinkError = ();
  28.  
  29. fn start_send(&mut self, item: Self::SinkItem) -> StartSend<Self::SinkItem, Self::SinkError> {
  30. Ok(AsyncSink::Ready)
  31. }
  32.  
  33. fn poll_complete(&mut self) -> Poll<(), Self::SinkError> {
  34. Ok(Async::Ready(()))
  35. }
  36.  
  37. fn close(&mut self) -> Poll<(), Self::SinkError> {
  38. self.poll_complete()
  39. }
  40. }
  41.  
  42. impl<S: Stream> IntoFuture for Handler<S> {
  43. type Future = (); // What would this be?
  44. type Item = ();
  45. type Error = ();
  46.  
  47. fn into_future(self) -> <Self as IntoFuture>::Future {
  48. let Handler {
  49. stream, tx, rx,
  50. } = self;
  51.  
  52. let codec = MyCodec::new(stream);
  53. let (writer, reader) = codec.split();
  54.  
  55. reader
  56. .map(|frame| {
  57. // handle frame
  58. None
  59. })
  60. .select(
  61. rx.map_err(|_err| ()).map(|frame| Some(frame))
  62. )
  63. .forward(writer)
  64. .map_err(|_err| ())
  65. }
  66. }
Add Comment
Please, Sign In to add comment