Added blocking and async utilities for sending RaaS messages
This commit is contained in:
3 files changed
+181
-1
No files matched your search
+94
-1
@@ -1,4 +1,7 @@
|
||||
pub mod raas {
|
||||
#[cfg(feature = "async")]
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||
|
||||
pub mod register {
|
||||
include!(concat!(env!("OUT_DIR"), "/raas.register.rs"));
|
||||
}
|
||||
@@ -57,12 +60,70 @@ pub mod raas {
|
||||
bytes
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "async"))]
|
||||
pub fn recv_raas_msg<T: std::io::Read>(stream: &mut T) -> Result<RaasMessage, std::io::Error> {
|
||||
let mut message_len_bytes = [0u8; 4];
|
||||
stream.read_exact(&mut message_len_bytes)?;
|
||||
|
||||
let len = u32::from_be_bytes(message_len_bytes);
|
||||
|
||||
let mut message = vec![0u8; len as usize];
|
||||
|
||||
stream.read_exact(&mut message)?;
|
||||
|
||||
Ok(RaasMessage { len, msg: message })
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "async"))]
|
||||
pub fn send_raas_msg<T: std::io::Write>(
|
||||
stream: &mut T,
|
||||
data: Vec<u8>,
|
||||
) -> Result<(), std::io::Error> {
|
||||
let msg = RaasMessage::new(data);
|
||||
|
||||
stream.write_all(&msg.into_bytes())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(feature = "async")]
|
||||
pub async fn recv_raas_msg<T: AsyncReadExt + std::marker::Unpin>(
|
||||
stream: &mut T,
|
||||
) -> Result<RaasMessage, std::io::Error> {
|
||||
let mut message_len_bytes = [0u8; 4];
|
||||
stream.read_exact(&mut message_len_bytes).await?;
|
||||
|
||||
let len = u32::from_be_bytes(message_len_bytes);
|
||||
|
||||
let mut message = vec![0u8; len as usize];
|
||||
|
||||
stream.read_exact(&mut message).await?;
|
||||
|
||||
Ok(RaasMessage { len, msg: message })
|
||||
}
|
||||
|
||||
#[cfg(feature = "async")]
|
||||
pub async fn send_raas_msg<T: AsyncWriteExt + std::marker::Unpin>(
|
||||
stream: &mut T,
|
||||
data: Vec<u8>,
|
||||
) -> Result<(), std::io::Error> {
|
||||
let msg = RaasMessage::new(data);
|
||||
|
||||
stream.write_all(&msg.into_bytes()).await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::raas;
|
||||
use crate::raas::RaasMessage;
|
||||
use crate::raas::{recv_raas_msg, send_raas_msg, RaasMessage};
|
||||
|
||||
#[cfg(not(feature = "async"))]
|
||||
use std::io::BufReader;
|
||||
|
||||
#[cfg(feature = "async")]
|
||||
use tokio::io::BufReader;
|
||||
|
||||
#[test]
|
||||
fn create_cmd() {
|
||||
@@ -111,4 +172,36 @@ mod test {
|
||||
assert_eq!(decoded_message.len, decoded_message.len);
|
||||
assert_eq!(decoded_message.msg, original_message.msg);
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "async"))]
|
||||
#[test]
|
||||
fn send_recv_test_raas_message() {
|
||||
let mut msg_buffer = Vec::new();
|
||||
let message = Vec::from(b"Hello World");
|
||||
|
||||
send_raas_msg(&mut msg_buffer, message.clone()).unwrap();
|
||||
|
||||
let mut reader = BufReader::new(msg_buffer.as_slice());
|
||||
let out_msg = recv_raas_msg(&mut reader).unwrap();
|
||||
|
||||
assert_eq!(message.len() as u32, out_msg.len);
|
||||
assert_eq!(message, out_msg.msg);
|
||||
}
|
||||
|
||||
#[cfg(feature = "async")]
|
||||
#[tokio::test]
|
||||
async fn send_recv_test_raas_message() {
|
||||
let mut msg_buffer = Vec::new();
|
||||
let message = Vec::from(b"Hello World");
|
||||
|
||||
send_raas_msg(&mut msg_buffer, message.clone())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let mut reader = BufReader::new(msg_buffer.as_slice());
|
||||
let out_msg = recv_raas_msg(&mut reader).await.unwrap();
|
||||
|
||||
assert_eq!(message.len() as u32, out_msg.len);
|
||||
assert_eq!(message, out_msg.msg);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user