use std::fmt;
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct GapEvent {
pub symbol: Arc<str>,
pub expected_tid: i64,
pub actual_tid: i64,
pub gap_size: i64,
pub detected_at_ms: i64,
pub filled_inline: bool,
}
impl fmt::Display for GapEvent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"GapEvent({}: expected={}, actual={}, gap={}, filled={})",
self.symbol, self.expected_tid, self.actual_tid, self.gap_size, self.filled_inline
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_gap_event_display() {
let event = GapEvent {
symbol: Arc::from("BTCUSDT"),
expected_tid: 101,
actual_tid: 110,
gap_size: 9,
detected_at_ms: 1700000000000,
filled_inline: false,
};
let display = format!("{event}");
assert!(display.contains("BTCUSDT"));
assert!(display.contains("expected=101"));
assert!(display.contains("actual=110"));
assert!(display.contains("gap=9"));
}
#[test]
fn test_gap_event_clone() {
let event = GapEvent {
symbol: Arc::from("ETHUSDT"),
expected_tid: 50,
actual_tid: 100,
gap_size: 50,
detected_at_ms: 1700000000000,
filled_inline: true,
};
let cloned = event.clone();
assert_eq!(&*cloned.symbol, "ETHUSDT");
assert!(cloned.filled_inline);
}
}