use crate::projection_protocol::{
ProjectionEpoch, ProjectionProtocolValidationError, ProjectionSource, MAX_PROJECTION_POSITION,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct OrderedDelivery {
source: ProjectionSource,
epoch: ProjectionEpoch,
position: u64,
gap_free: bool,
}
impl OrderedDelivery {
pub(crate) fn new(
source: ProjectionSource,
epoch: ProjectionEpoch,
position: u64,
gap_free: bool,
) -> Result<Self, ProjectionProtocolValidationError> {
if position > MAX_PROJECTION_POSITION {
return Err(ProjectionProtocolValidationError::TooLarge {
field: "ordered delivery position",
value: position,
max: MAX_PROJECTION_POSITION,
});
}
Ok(Self {
source,
epoch,
position,
gap_free,
})
}
pub fn source(&self) -> &ProjectionSource {
&self.source
}
pub fn epoch(&self) -> &ProjectionEpoch {
&self.epoch
}
pub fn position(&self) -> u64 {
self.position
}
pub fn is_gap_free(&self) -> bool {
self.gap_free
}
}