explicit_trim/
explicit_trim.rs

1use s2::{
2    client::{ClientConfig, StreamClient},
3    types::{AppendInput, AppendRecordBatch, BasinName, CommandRecord},
4};
5
6#[tokio::main]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let token = std::env::var("S2_AUTH_TOKEN")?;
9    let config = ClientConfig::new(token);
10    let basin: BasinName = "my-favorite-basin".parse()?;
11    let stream = "my-favorite-stream";
12    let stream_client = StreamClient::new(config, basin, stream);
13
14    let tail = stream_client.check_tail().await?;
15    if tail == 0 {
16        println!("Empty stream");
17        return Ok(());
18    }
19
20    let latest_seq_num = tail - 1;
21    let trim_request = CommandRecord::trim(latest_seq_num);
22
23    let append_record_batch = AppendRecordBatch::try_from_iter([trim_request])
24        .expect("valid batch with 1 command record");
25    let append_input = AppendInput::new(append_record_batch);
26    let _ = stream_client.append(append_input).await?;
27
28    println!("Trim requested");
29
30    Ok(())
31}