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}