explicit_trim/
explicit_trim.rs

1use s2_sdk::{
2    S2,
3    types::{AppendInput, AppendRecordBatch, BasinName, CommandRecord, S2Config, StreamName},
4};
5
6#[tokio::main]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let access_token =
9        std::env::var("S2_ACCESS_TOKEN").map_err(|_| "S2_ACCESS_TOKEN env var not set")?;
10    let basin_name: BasinName = std::env::var("S2_BASIN")
11        .map_err(|_| "S2_BASIN env var not set")?
12        .parse()?;
13    let stream_name: StreamName = std::env::var("S2_STREAM")
14        .map_err(|_| "S2_STREAM env var not set")?
15        .parse()?;
16
17    let s2 = S2::new(S2Config::new(access_token))?;
18    let stream = s2.basin(basin_name).stream(stream_name);
19
20    let tail = stream.check_tail().await?;
21    if tail.seq_num == 0 {
22        println!("Empty stream");
23        return Ok(());
24    }
25
26    let input = AppendInput::new(AppendRecordBatch::try_from_iter([CommandRecord::trim(
27        tail.seq_num - 1,
28    )
29    .into()])?);
30    stream.append(input).await?;
31    println!("Trim requested");
32
33    Ok(())
34}