streaming/
streaming.rs

1use std::error::Error;
2
3use tokio_stream::StreamExt;
4use wireman_core::{client::call_server_streaming, ProtoDescriptor};
5
6pub type Result<T> = std::result::Result<T, Box<dyn Error>>;
7
8#[tokio::main]
9async fn main() -> Result<()> {
10    let desc = ProtoDescriptor::new(
11        vec!["/Users/philippreiter/Rust/wireman/example/server/streaming"],
12        vec!["streaming.proto"],
13    )?;
14
15    let service = &desc.get_services()[0];
16    let method = &desc.get_methods(service)[0];
17
18    if !method.is_server_streaming() {
19        println!("Method must be server streaming");
20    }
21
22    let mut request = desc.get_request(&method);
23    request.set_address("http://localhost:50051");
24
25    let response = call_server_streaming(&request, None).await?;
26
27    let mut pinned = std::pin::pin!(response);
28    let stream = pinned.as_mut().get_mut();
29
30    while let Some(message) = stream.next().await {
31        let message = message?;
32        println!("message: {:?}", message.message);
33        println!();
34    }
35
36    Ok(())
37}