Add Messenger::send_async()

This commit is contained in:
mars 2022-11-20 11:24:58 -07:00
parent c244834004
commit ac5d6475f1
1 changed files with 15 additions and 2 deletions

View File

@ -214,10 +214,23 @@ impl<T: Read, I: DeserializeOwned, O> Messenger<T, I, O> {
#[cfg(feature = "async")]
mod async_messages {
use super::*;
use futures_util::AsyncReadExt;
use futures_util::{AsyncReadExt, AsyncWriteExt};
use std::marker::Unpin;
impl<T: AsyncReadExt + Unpin, I: DeserializeOwned, O: Serialize> Messenger<T, I, O> {
impl<T: AsyncWriteExt + Unpin, I, O: Serialize> Messenger<T, I, O> {
pub async fn send_async(&mut self, msg: &O) -> std::io::Result<()> {
use byteorder::{LittleEndian, WriteBytesExt};
let payload = serde_json::to_vec(msg).unwrap();
let len = payload.len() as u32;
let mut msg = Vec::with_capacity(4 + payload.len());
msg.write_u32::<LittleEndian>(len)?;
msg.extend_from_slice(&payload);
self.transport.write_all(&msg).await?;
Ok(())
}
}
impl<T: AsyncReadExt + Unpin, I: DeserializeOwned, O> Messenger<T, I, O> {
pub async fn recv(&mut self) -> std::io::Result<I> {
let mut buf = [0u8; 1024];