Crate async_transmit[−][src]
Async trait for transmitting data to peers
async-transmit crate provides Transmit trait which allows value to be transmit asynchronously.
This crate relies on async-trait, the original definition of the Transmit trait is:
use async_trait::async_trait; #[async_trait] pub trait Transmit { type Item; type Error; async fn transmit(&mut self, item: Self::Item) -> Result<(), Self::Error> where Self::Item: 'async_trait; }
So use #[async_trait] to when implement Transmit like:
use async_transmit::*; use async_trait::async_trait; struct VoidTransmitter<I, E> { phantom: std::marker::PhantomData<(I, E)>, } #[async_trait] impl<I, E> Transmit for VoidTransmitter<I, E> where I: Send, E: Send, { type Item = I; type Error = E; async fn transmit(&mut self, item: Self::Item) -> Result<(), Self::Error> where I: 'async_trait, { // Do Nothing Ok(()) } }
With async-std/async-channel
If you’d like to play with async_std::channel::Sender or async_channel::Sender,
use with-async-channel feature like:
[dependencies.async-transmit]
version = "0.1.0"
features = ["with-async-channel"]
Then you can use transmit() method through Transmit trait on the sender like:
use async_transmit::*; let (mut s, r) = async_channel::unbounded::<&'static str>(); s.transmit("Hello").await?; s.transmit("World").await?; drop(s); assert_eq!(Some("Hello"), r.recv().await.ok()); assert_eq!(Some("World"), r.recv().await.ok()); assert_eq!(None, r.recv().await.ok());
With tokio
If you’d like to play with tokio::sync::mpsc::Sender or tokio::sync::mpsc::UnboundedSender,
use with-tokio feature like:
[dependencies.async-transmit]
version = "0.1.0"
features = ["with-tokio"]
Then you can use transmit() method through Transmit trait on the sender like:
use async_transmit::*; let (mut s, mut r) = tokio::sync::mpsc::unbounded_channel::<&'static str>(); s.transmit("Hello").await?; s.transmit("World").await?; drop(s); assert_eq!(Some("Hello"), r.recv().await); assert_eq!(Some("World"), r.recv().await); assert_eq!(None, r.recv().await);
With futures-rs
If you’d like to play with futures::sink::Sink, use with-sink feature like:
[dependencies.async-transmit]
version = "0.1.0"
features = ["with-sink"]
Then you can use async_transmit::from_sink() to create a wrapper object which implements Transmit
trait like:
use async_transmit::*; use futures::prelude::*; let (s, mut r) = futures::channel::mpsc::unbounded::<&'static str>(); let mut s = from_sink(s); s.transmit("Hello").await?; s.transmit("World").await?; drop(s); assert_eq!(Some("Hello"), r.next().await); assert_eq!(Some("World"), r.next().await); assert_eq!(None, r.next().await);
Structs
| FromSink | |
| With |
Traits
| Transmit | The |
| TransmitExt | An extension trait for |
Functions
| from_sink | Create |