Skip to main content

consumer/
consumer.rs

1use futures_util::StreamExt;
2use s2_sdk::{
3    S2,
4    types::{BasinName, ReadInput, ReadSessionConfig, S2Config, StreamName},
5};
6use tokio::select;
7
8#[tokio::main]
9async fn main() -> Result<(), Box<dyn std::error::Error>> {
10    let access_token = std::env::var("S2_ACCESS_TOKEN")?;
11    let basin_name: BasinName = std::env::var("S2_BASIN")?.parse()?;
12    let stream_name: StreamName = std::env::var("S2_STREAM")?.parse()?;
13
14    let s2 = S2::new(S2Config::new(access_token))?;
15    let stream = s2.basin(basin_name).stream(stream_name);
16
17    let input = ReadInput::new();
18    let mut batches = stream
19        .read_session(input, ReadSessionConfig::default())
20        .await?;
21    loop {
22        select! {
23            batch = batches.next() => {
24                let Some(batch) = batch else { break };
25                let batch = batch?;
26                println!("{batch:?}");
27            }
28            _ = tokio::signal::ctrl_c() => break,
29        }
30    }
31
32    Ok(())
33}