#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct CommitToken {
group: String,
vlsn: u64,
}
impl CommitToken {
pub fn new(group: impl Into<String>, vlsn: u64) -> Option<Self> {
if vlsn == 0 {
return None;
}
Some(Self { group: group.into(), vlsn })
}
pub fn group(&self) -> &str {
&self.group
}
pub fn vlsn(&self) -> u64 {
self.vlsn
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_new_token() {
let t = CommitToken::new("g1", 42).unwrap();
assert_eq!(t.group(), "g1");
assert_eq!(t.vlsn(), 42);
}
#[test]
fn test_null_vlsn_rejected() {
assert!(CommitToken::new("g1", 0).is_none());
}
#[test]
fn test_eq_and_clone() {
let a = CommitToken::new("g1", 7).unwrap();
let b = a.clone();
assert_eq!(a, b);
let c = CommitToken::new("g2", 7).unwrap();
assert_ne!(a, c);
}
}