use crate::list_envelope::{ListEnvelope, Reason, Total, Unit};
#[inline]
pub fn outline_trailer_byte_len(envelope: &crate::list_envelope::ListEnvelope) -> usize {
crate::list_envelope::measure_trailer_len(envelope)
}
#[inline]
pub fn outline_measure_trailer_len(envelope: &crate::list_envelope::ListEnvelope) -> usize {
outline_trailer_byte_len(envelope)
}
#[inline]
pub fn build_outline_files_envelope(
shown: usize,
budget_rollup_files: usize,
budget_rollups_present: bool,
collection_truncated: bool,
walk_truncated: bool,
skipped_foreign_mounts: usize,
) -> Option<ListEnvelope> {
let mut causes = Vec::new();
let walk_cause = collection_truncated || walk_truncated || skipped_foreign_mounts > 0;
if walk_cause {
causes.push(Reason::Walk);
}
if budget_rollups_present {
causes.push(Reason::Budget);
}
if causes.is_empty() {
return None;
}
let total = if walk_cause {
Total::AtLeast(shown + budget_rollup_files)
} else {
Total::Exact(shown + budget_rollup_files)
};
Some(ListEnvelope::new(
shown,
total,
Unit::Files,
causes,
&["path"],
))
}