std-embedded-nal 0.4.0

Implementation of the `embedded-nal` traits for large devices that support the standard library
Documentation
use core::net::SocketAddr;
use embedded_nal::nb::block;

const PORT: u16 = 9876;

#[test]
fn udp_pingpong_self() {
    use embedded_nal::{UdpClientStack, UdpFullStack};

    let mut stack = std_embedded_nal::Stack::default();

    let mut server = stack.socket().unwrap();

    stack.bind(&mut server, PORT).unwrap();

    let mut client = stack.socket().unwrap();
    stack
        .connect(&mut client, SocketAddr::new("::1".parse().unwrap(), PORT))
        .unwrap();

    block!(stack.send(&mut client, b"ping")).unwrap();

    let mut buf = [0u8; 4];
    let req = block!(stack.receive(&mut server, &mut buf)).unwrap();
    assert_eq!(req.0, 4);
    assert_eq!(&buf, b"ping");

    block!(stack.send_to(&mut server, req.1, b"pong")).unwrap();
    let res = block!(stack.receive(&mut client, &mut buf)).unwrap();
    assert_eq!(res.0, 4);
    assert_eq!(&buf, b"pong");
}

#[test]
fn tcp_pingpong_self() {
    use embedded_nal::{TcpClientStack, TcpFullStack};

    let mut stack = std_embedded_nal::Stack::default();

    let mut server = stack.socket().unwrap();

    stack.bind(&mut server, PORT).unwrap();

    let mut client = stack.socket().unwrap();
    stack
        .connect(&mut client, SocketAddr::new("::1".parse().unwrap(), PORT))
        .unwrap();

    let (mut server, _) = block!(stack.accept(&mut server)).unwrap();

    block!(stack.send(&mut client, b"ping")).unwrap();

    let mut buf = [0u8; 4];
    let req = block!(stack.receive(&mut server, &mut buf)).unwrap();
    assert_eq!(req, 4);
    assert_eq!(&buf, b"ping");
    // Lots of unwrap here as things are known to work immediately.

    block!(stack.send(&mut server, b"pong")).unwrap();
    let res = block!(stack.receive(&mut client, &mut buf)).unwrap();
    assert_eq!(res, 4);
    assert_eq!(&buf, b"pong");
}