use std::time::Duration;
use s2_sdk::types::{
AccessTokenInfo, BasinInfo, Metric, SequencedRecord, StreamInfo, StreamPosition,
};
use crate::{
error::CliError,
types::{LatencyStats, StorageClass, StreamConfig, TimestampingMode},
};
#[derive(Debug, Clone)]
pub struct BasinConfigInfo {
pub create_stream_on_append: bool,
pub create_stream_on_read: bool,
pub storage_class: Option<StorageClass>,
pub retention_age_secs: Option<u64>, pub timestamping_mode: Option<TimestampingMode>,
pub timestamping_uncapped: bool,
}
#[derive(Debug, Clone)]
pub struct StreamConfigInfo {
pub storage_class: Option<StorageClass>,
pub retention_age_secs: Option<u64>, pub timestamping_mode: Option<TimestampingMode>,
pub timestamping_uncapped: bool,
pub delete_on_empty_min_age_secs: Option<u64>, }
#[derive(Debug)]
pub enum Event {
BasinsLoaded(Result<(Vec<BasinInfo>, bool), CliError>),
MoreBasinsLoaded(Result<(Vec<BasinInfo>, bool), CliError>),
StreamsLoaded(Result<(Vec<StreamInfo>, bool), CliError>),
MoreStreamsLoaded(Result<(Vec<StreamInfo>, bool), CliError>),
StreamConfigLoaded(Result<StreamConfig, CliError>),
TailPositionLoaded(Result<StreamPosition, CliError>),
RecordReceived(Result<SequencedRecord, CliError>),
ReadEnded,
PipRecordReceived(Result<SequencedRecord, CliError>),
PipReadEnded,
BasinCreated(Result<BasinInfo, CliError>),
BasinDeleted(Result<String, CliError>),
StreamCreated(Result<StreamInfo, CliError>),
StreamDeleted(Result<String, CliError>),
BasinConfigLoaded(Result<BasinConfigInfo, CliError>),
StreamConfigForReconfigLoaded(Result<StreamConfigInfo, CliError>),
BasinReconfigured(Result<(), CliError>),
StreamReconfigured(Result<(), CliError>),
RecordAppended(Result<(u64, String, usize), CliError>),
FileAppendProgress {
appended: usize,
total: usize,
last_seq: Option<u64>,
},
FileAppendComplete(Result<(usize, u64, u64), CliError>),
StreamFenced(Result<String, CliError>),
StreamTrimmed(Result<(u64, u64), CliError>),
AccessTokensLoaded(Result<Vec<AccessTokenInfo>, CliError>),
AccessTokenIssued(Result<String, CliError>),
AccessTokenRevoked(Result<String, CliError>),
AccountMetricsLoaded(Result<Vec<Metric>, CliError>),
BasinMetricsLoaded(Result<Vec<Metric>, CliError>),
StreamMetricsLoaded(Result<Vec<Metric>, CliError>),
Error(CliError),
BenchStreamCreated(Result<String, CliError>),
BenchWriteSample(BenchSample),
BenchReadSample(BenchSample),
BenchCatchupSample(BenchSample),
BenchPhaseComplete(BenchPhase),
BenchComplete(Result<BenchFinalStats, CliError>),
}
#[derive(Debug, Clone)]
pub struct BenchSample {
pub bytes: u64,
pub records: u64,
pub elapsed: Duration,
pub mib_per_sec: f64,
pub records_per_sec: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BenchPhase {
Write,
Read,
CatchupWait,
Catchup,
}
#[derive(Debug, Clone)]
pub struct BenchFinalStats {
pub ack_latency: Option<LatencyStats>,
pub e2e_latency: Option<LatencyStats>,
}