#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash, Ord, PartialOrd)]
pub struct DamlLedgerOffset(pub i64);
impl DamlLedgerOffset {
pub const BEGIN: Self = Self(0);
pub const fn new(offset: i64) -> Self {
Self(offset)
}
pub const fn value(self) -> i64 {
self.0
}
pub const fn is_begin(self) -> bool {
self.0 == 0
}
}
impl From<i64> for DamlLedgerOffset {
fn from(v: i64) -> Self {
Self(v)
}
}
impl From<DamlLedgerOffset> for i64 {
fn from(o: DamlLedgerOffset) -> Self {
o.0
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum DamlLedgerOffsetType {
Unbounded,
Bounded(DamlLedgerOffset),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn begin_sentinel_round_trips() {
assert_eq!(DamlLedgerOffset::BEGIN, DamlLedgerOffset::new(0));
assert!(DamlLedgerOffset::BEGIN.is_begin());
let raw: i64 = DamlLedgerOffset::BEGIN.into();
assert_eq!(raw, 0);
assert_eq!(DamlLedgerOffset::from(raw), DamlLedgerOffset::BEGIN);
}
#[test]
fn arbitrary_offset_round_trips() {
let off = DamlLedgerOffset::new(424_242);
let raw: i64 = off.into();
assert_eq!(raw, 424_242);
let back = DamlLedgerOffset::from(raw);
assert_eq!(back, off);
assert!(!back.is_begin());
}
}