use super::chunk::Chunker;
use coarsetime::{Duration as CDuration, Instant as CInstant};
use std::time::Duration;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct ByTime {
pub chunk_duration: CDuration,
coarse_chunk_start: CInstant,
}
impl ByTime {
#[must_use]
pub fn new(chunk_duration: Duration) -> Self {
Self {
chunk_duration: CDuration::new(chunk_duration.as_secs(), chunk_duration.subsec_nanos()),
coarse_chunk_start: CInstant::now(),
}
}
}
impl Default for ByTime {
fn default() -> Self {
Self::new(Duration::from_secs(5))
}
}
impl Chunker for ByTime {
#[inline]
fn flush_group_start(&mut self) -> bool {
self.coarse_chunk_start.elapsed() > self.chunk_duration
}
fn note_flush(&mut self) {
self.coarse_chunk_start = CInstant::now();
}
}