use std::ops::Range;
use crate::Timestamp;
use binary_stream::futures::Decodable;
pub trait FileItem: Default + std::fmt::Debug + Decodable {
fn offset(&self) -> &Range<u64>;
fn value(&self) -> &Range<u64>;
fn set_offset(&mut self, offset: Range<u64>);
fn set_value(&mut self, value: Range<u64>);
}
#[derive(Default, Debug)]
pub struct FileRecord {
offset: Range<u64>,
value: Range<u64>,
}
impl FileItem for FileRecord {
fn offset(&self) -> &Range<u64> {
&self.offset
}
fn value(&self) -> &Range<u64> {
&self.value
}
fn set_offset(&mut self, offset: Range<u64>) {
self.offset = offset;
}
fn set_value(&mut self, value: Range<u64>) {
self.value = value;
}
}
#[derive(Default, Debug)]
pub struct VaultRecord {
offset: Range<u64>,
value: Range<u64>,
pub(crate) id: [u8; 16],
pub(crate) commit: [u8; 32],
}
impl FileItem for VaultRecord {
fn offset(&self) -> &Range<u64> {
&self.offset
}
fn value(&self) -> &Range<u64> {
&self.value
}
fn set_offset(&mut self, offset: Range<u64>) {
self.offset = offset;
}
fn set_value(&mut self, value: Range<u64>) {
self.value = value;
}
}
impl VaultRecord {
pub fn id(&self) -> [u8; 16] {
self.id
}
pub fn commit(&self) -> [u8; 32] {
self.commit
}
}
#[derive(Default, Debug, Clone, Eq)]
pub struct EventLogFileRecord {
offset: Range<u64>,
value: Range<u64>,
pub(crate) time: Timestamp,
pub(crate) last_commit: [u8; 32],
pub(crate) commit: [u8; 32],
}
impl EventLogFileRecord {
pub fn commit(&self) -> [u8; 32] {
self.commit
}
pub fn last_commit(&self) -> [u8; 32] {
self.last_commit
}
pub fn time(&self) -> &Timestamp {
&self.time
}
}
impl PartialEq for EventLogFileRecord {
fn eq(&self, other: &Self) -> bool {
self.time == other.time
&& self.commit == other.commit
&& self.last_commit == other.last_commit
}
}
impl FileItem for EventLogFileRecord {
fn offset(&self) -> &Range<u64> {
&self.offset
}
fn value(&self) -> &Range<u64> {
&self.value
}
fn set_offset(&mut self, offset: Range<u64>) {
self.offset = offset;
}
fn set_value(&mut self, value: Range<u64>) {
self.value = value;
}
}