use crate::Cacheable;
pub trait MonotonicWatermark: Ord + Clone + Send + Sync + 'static {}
macro_rules! impl_numeric_watermark {
($($ty:ty),* $(,)?) => {
$(
impl MonotonicWatermark for $ty {}
)*
};
}
impl_numeric_watermark!(i8, i16, i32, i64, i128, isize);
impl_numeric_watermark!(u8, u16, u32, u64, u128, usize);
impl MonotonicWatermark for std::time::SystemTime {}
impl<A, B> MonotonicWatermark for (A, B)
where
A: MonotonicWatermark,
B: MonotonicWatermark,
{
}
impl<A, B, C> MonotonicWatermark for (A, B, C)
where
A: MonotonicWatermark,
B: MonotonicWatermark,
C: MonotonicWatermark,
{
}
impl<A, B, C, D> MonotonicWatermark for (A, B, C, D)
where
A: MonotonicWatermark,
B: MonotonicWatermark,
C: MonotonicWatermark,
D: MonotonicWatermark,
{
}
#[cfg(feature = "watermark-time")]
mod watermark_time {
use super::MonotonicWatermark;
impl MonotonicWatermark for time::Date {}
impl MonotonicWatermark for time::OffsetDateTime {}
impl MonotonicWatermark for time::PrimitiveDateTime {}
}
#[cfg(feature = "watermark-chrono")]
mod watermark_chrono {
use super::MonotonicWatermark;
impl MonotonicWatermark for chrono::DateTime<chrono::FixedOffset> {}
impl MonotonicWatermark for chrono::DateTime<chrono::Utc> {}
impl MonotonicWatermark for chrono::NaiveDate {}
impl MonotonicWatermark for chrono::NaiveDateTime {}
}
pub trait DeltaSyncCacheable: Cacheable {
type Watermark: MonotonicWatermark;
fn watermark(&self) -> Self::Watermark;
}