5 releases (3 breaking)

0.4.0 May 30, 2022
0.3.0 Nov 9, 2021
0.2.1 Sep 18, 2021
0.2.0 Apr 8, 2021
0.1.0 Apr 7, 2021

#1482 in Development tools

Download history 109/week @ 2024-03-11 64/week @ 2024-03-18 94/week @ 2024-03-25 136/week @ 2024-04-01 56/week @ 2024-04-08 80/week @ 2024-04-15 88/week @ 2024-04-22 65/week @ 2024-04-29 51/week @ 2024-05-06 56/week @ 2024-05-13 72/week @ 2024-05-20 54/week @ 2024-05-27 77/week @ 2024-06-03 48/week @ 2024-06-10 63/week @ 2024-06-17 65/week @ 2024-06-24

261 downloads per month

MIT license

28KB
604 lines

async-prost

Async access to prost-encoded item stream, highly inspected(copied) by/from async-bincode. Could be used with tokio-tower to build TCP applications with prost encoded messages.

Usage:

#[derive(Clone, PartialEq, Message)]
pub struct Event {
    #[prost(bytes = "bytes", tag = "1")]
    pub id: Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub data: Bytes,
}

let echo = TcpListener::bind("127.0.0.1:0").await.unwrap();
let addr = echo.local_addr().unwrap();

tokio::spawn(async move {
    let (stream, _) = echo.accept().await.unwrap();
    let mut stream = AsyncProstStream::<_, Event, Event, _>::from(stream).for_async();
    let (r, w) = stream.tcp_split();
    r.forward(w).await.unwrap();
});

let stream = TcpStream::connect(&addr).await.unwrap();
let mut client = AsyncProstStream::<_, Event, Event, _>::from(stream).for_async();
let event = Event {
    id: Bytes::from_static(b"1234"),
    data: Bytes::from_static(b"hello world"),
};
client.send(event.clone()).await.unwrap();
assert_eq!(client.next().await.unwrap().unwrap(), event);

let event = Event {
    id: Bytes::from_static(b"1235"),
    data: Bytes::from_static(b"goodbye world"),
};
client.send(event.clone()).await.unwrap();
assert_eq!(client.next().await.unwrap().unwrap(), event);
drop(client);

See tests for more examples.

Have fun with this crate!

License

This project is distributed under the terms of MIT.

See LICENSE for details.

Copyright 2021 Tyr Chen

Dependencies

~4–13MB
~152K SLoC