aurpc 0.3.1

Asynchronous UDP RPCs
Documentation
use crate::RpcSocket;
use async_std::{net::UdpSocket, task};

#[async_std::test]
async fn echo_succeeds() {
    let server_socket = RpcSocket::bind("0.0.0.0:0")
        .await
        .expect("couldn't bind server");
    let client_socket = UdpSocket::bind("0.0.0.0:0").await.expect(
        "couldn't bind
        client",
    );

    let server_addr = server_socket.local_addr().expect(
        "failed getting server
        socket address",
    );

    let msg: [u8; 6] = [0, 1, 2, 3, 4, 5];
    let mut rsp_msg = msg;

    let server_handle = task::spawn(async move {
        let mut buf = [0u8; 256];
        let (bytes_read, responder) = server_socket
            .recv_from(&mut buf[..])
            .await
            .expect("couldn't read on server socket");

        responder.respond(&buf[..bytes_read]).await
    });

    let written = client_socket
        .send_to(&msg[..], server_addr)
        .await
        .expect("failed sending message");

    server_handle.await.expect("server failure");

    let (read, _) = client_socket
        .recv_from(&mut rsp_msg[..])
        .await
        .expect("failed receiving message");

    assert_eq!(written, read);
    assert_eq!(&msg[0] + 1, rsp_msg[0]);
    assert_eq!(&msg[1..], &rsp_msg[1..]);
}