seraphic 0.1.55

Lightweight JSON RPC 2.0
Documentation
use seraphic::packet::{PacketRead, TcpPacket};
use serde::{Deserialize, Serialize};
use std::thread::sleep;
use std::time::Duration;
use tokio::io::BufReader;
use tokio::net::{TcpListener, TcpStream};

#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct TestData {
    id: u32,
    message: String,
}

#[tokio::test]
async fn test_async_tcp_packet_read_write() {
    let listener = TcpListener::bind("127.0.0.1:7879").await.unwrap();

    tokio::spawn(async move {
        let (socket, _) = listener.accept().await.unwrap();
        let mut reader = BufReader::new(socket);
        let received: PacketRead<TestData> = TcpPacket::async_read(&mut reader).await.unwrap();
        assert_eq!(
            received,
            PacketRead::Message(TestData {
                id: 42,
                message: "Async Hello".into()
            })
        );
    });

    sleep(Duration::from_millis(100));

    let mut stream = TcpStream::connect("127.0.0.1:7879").await.unwrap();
    let test_data = TestData {
        id: 42,
        message: "Async Hello".into(),
    };
    TcpPacket::async_write(&mut stream, &test_data)
        .await
        .unwrap();
}