use super::constants::{
SEQUENCE_BITS_IN_MILLISECOND,
SEQUENCE_BITS_IN_SECOND,
TIMESTAMP_BITS_IN_MILLISECOND,
TIMESTAMP_BITS_IN_SECOND,
WAIT_DURATION_IN_MILLISECOND,
WAIT_DURATION_IN_SECOND,
};
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub enum TimestampPrecision {
Millisecond,
Second,
}
impl TimestampPrecision {
pub const fn ordinal(self) -> u64 {
match self {
Self::Millisecond => 0,
Self::Second => 1,
}
}
pub const fn from_bit(bit: u64) -> Self {
if bit == 0 {
Self::Millisecond
} else {
Self::Second
}
}
pub const fn timestamp_bits(self) -> u8 {
match self {
Self::Millisecond => TIMESTAMP_BITS_IN_MILLISECOND,
Self::Second => TIMESTAMP_BITS_IN_SECOND,
}
}
pub const fn sequence_bits(self) -> u8 {
match self {
Self::Millisecond => SEQUENCE_BITS_IN_MILLISECOND,
Self::Second => SEQUENCE_BITS_IN_SECOND,
}
}
pub const fn divisor_millis(self) -> u64 {
match self {
Self::Millisecond => 1,
Self::Second => 1_000,
}
}
pub const fn wait_duration_millis(self) -> u64 {
match self {
Self::Millisecond => WAIT_DURATION_IN_MILLISECOND,
Self::Second => WAIT_DURATION_IN_SECOND,
}
}
}