Skip to content

tyrchen/async-prost

Repository files navigation

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages