consumer/
consumer.rs

1use futures::StreamExt;
2use s2_sdk::{
3    S2,
4    types::{BasinName, ReadInput, 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.read_session(input).await?;
19    loop {
20        select! {
21            batch = batches.next() => {
22                let Some(batch) = batch else { break };
23                let batch = batch?;
24                println!("{batch:?}");
25            }
26            _ = tokio::signal::ctrl_c() => break,
27        }
28    }
29
30    Ok(())
31}