use super::RedactionBatchHandle;
use super::RedactionBatchHandleError;
use crate::RedactionTextOutput;
use crate::runtime::BatchPublication;
use crate::runtime::RedactionHandle;
pub(crate) struct RedactionBatchOutput {
output: BatchPublication,
}
impl RedactionBatchOutput {
#[must_use]
pub(crate) const fn from_publication(output: BatchPublication) -> Self {
Self { output }
}
#[must_use]
#[inline(always)]
pub(crate) const fn summary(&self) -> &crate::RedactionSummary {
self.output.summary()
}
pub(crate) fn resolve(
&self,
handle: RedactionBatchHandle,
) -> Result<&RedactionTextOutput, RedactionBatchHandleError> {
self.output
.resolve(RedactionHandle::new(handle.batch_id, handle.item_index))
.map_err(|error| match error {
crate::RedactionHandleError::DifferentTransaction => RedactionBatchHandleError::DifferentBatch,
crate::RedactionHandleError::MissingItem => RedactionBatchHandleError::MissingItem,
})
}
}
#[cfg(test)]
mod tests {
use super::RedactionBatchHandle;
use super::RedactionBatchHandleError;
use crate::Redactor;
#[test]
fn test_resolve_reports_missing_item_for_same_batch_invalid_index() {
let mut batch = Redactor::standard().batch();
let valid = batch.redact_field("name", "Ada");
let missing = RedactionBatchHandle {
batch_id: valid.batch_id,
item_index: usize::MAX,
};
let output = batch.finish();
assert!(matches!(
output.resolve(missing),
Err(RedactionBatchHandleError::MissingItem),
));
}
}