use super::DiagnosticRedactionHandle;
use super::DiagnosticRedactionHandleError;
use crate::RedactionTextOutput;
use crate::runtime::BatchPublication;
use crate::runtime::RedactionHandle;
pub(crate) struct DiagnosticRedactionBatchOutput {
output: BatchPublication,
}
impl DiagnosticRedactionBatchOutput {
#[must_use]
#[inline(always)]
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()
}
#[inline]
pub(crate) fn resolve(
&self,
handle: DiagnosticRedactionHandle,
) -> Result<&RedactionTextOutput, DiagnosticRedactionHandleError> {
self.output
.resolve(RedactionHandle::new(handle.batch_id, handle.item_index))
.map_err(|error| match error {
crate::RedactionHandleError::DifferentTransaction => DiagnosticRedactionHandleError::DifferentBatch,
crate::RedactionHandleError::MissingItem => DiagnosticRedactionHandleError::MissingItem,
})
}
}
#[cfg(test)]
mod tests {
use super::DiagnosticRedactionHandle;
use super::DiagnosticRedactionHandleError;
use crate::Redactor;
#[test]
fn test_resolve_reports_missing_item_for_same_batch_invalid_index() {
let mut batch = Redactor::standard().diagnostic_batch();
let valid = batch.redact_field("name", "Ada");
let missing = DiagnosticRedactionHandle {
batch_id: valid.batch_id,
item_index: usize::MAX,
};
let output = batch.finish_publication();
assert!(matches!(
output.resolve(missing),
Err(DiagnosticRedactionHandleError::MissingItem),
));
}
}