use std::sync::atomic::AtomicBool;
use super::Objects;
use crate::{ObjectId, ObjectKind, ObjectReadError, ReadLimits};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ObjectHeader {
kind: ObjectKind,
size: u64,
}
impl ObjectHeader {
pub fn kind(&self) -> ObjectKind {
self.kind
}
pub fn size(&self) -> u64 {
self.size
}
}
impl Objects {
pub fn header(
&self,
id: ObjectId,
limits: ReadLimits,
) -> Result<Option<ObjectHeader>, ObjectReadError> {
Ok(self
.locate(id, limits, &AtomicBool::new(false))?
.map(|(kind, size)| ObjectHeader { kind, size }))
}
pub fn headers_controlled(
&self,
ids: impl IntoIterator<Item = ObjectId>,
limits: ReadLimits,
cancelled: &AtomicBool,
) -> Result<Vec<(ObjectId, Option<ObjectHeader>)>, ObjectReadError> {
Ok(self
.locate_all(ids, limits, cancelled)?
.into_iter()
.map(|(id, found)| (id, found.map(|(kind, size)| ObjectHeader { kind, size })))
.collect())
}
}