use crate::metadata::AchievedAtomicity;
use crate::metadata::NonSensitiveMetadata;
use crate::metadata::PublicationMethod;
use crate::metadata::ResourceVersion;
use crate::metadata::UserMetadata;
#[derive(Clone, Debug, PartialEq)]
pub struct WriteOutcome {
bytes_written: Option<u64>,
version: Option<ResourceVersion>,
atomicity: AchievedAtomicity,
method: PublicationMethod,
durable: bool,
diagnostics: NonSensitiveMetadata,
}
impl WriteOutcome {
#[inline]
#[must_use]
pub fn new(atomicity: AchievedAtomicity, method: PublicationMethod) -> Self {
Self {
bytes_written: None,
version: None,
atomicity,
method,
durable: false,
diagnostics: NonSensitiveMetadata::new(),
}
}
#[inline]
#[must_use]
pub const fn bytes_written(&self) -> Option<u64> {
self.bytes_written
}
#[inline]
#[must_use]
pub const fn version(&self) -> Option<&ResourceVersion> {
self.version.as_ref()
}
#[inline]
#[must_use]
pub const fn atomicity(&self) -> AchievedAtomicity {
self.atomicity
}
#[inline]
#[must_use]
pub const fn method(&self) -> PublicationMethod {
self.method
}
#[inline]
#[must_use]
pub const fn durable(&self) -> bool {
self.durable
}
#[inline]
#[must_use]
pub const fn diagnostics(&self) -> &NonSensitiveMetadata {
&self.diagnostics
}
#[inline]
#[must_use]
pub const fn with_bytes_written(mut self, bytes_written: u64) -> Self {
self.bytes_written = Some(bytes_written);
self
}
#[inline]
#[must_use]
pub fn with_version(mut self, version: ResourceVersion) -> Self {
self.version = Some(version);
self
}
#[inline]
#[must_use]
pub const fn with_durable(mut self, durable: bool) -> Self {
self.durable = durable;
self
}
#[inline]
#[must_use]
pub fn with_diagnostics(mut self, diagnostics: UserMetadata) -> Self {
self.diagnostics = NonSensitiveMetadata::from(diagnostics);
self
}
}