use crate::{BlobMetadata, BlobReader, Id};
use bytes::Bytes;
#[derive(Clone, Debug)]
pub struct Blob {
id: Id,
data: Bytes,
metadata: BlobMetadata,
}
impl Blob {
pub fn compute(data: impl Into<Bytes>) -> Self {
let data = data.into();
Self {
id: Id::of(&data),
metadata: BlobMetadata::new(data.len() as u64),
data,
}
}
pub fn new_unchecked(id: Id, data: impl Into<Bytes>) -> Self {
let data = data.into();
Self {
id,
metadata: BlobMetadata::new(data.len() as u64),
data,
}
}
pub fn with_metadata(mut self, metadata: BlobMetadata) -> Self {
self.metadata = metadata;
self
}
pub fn id(&self) -> &Id {
&self.id
}
pub fn metadata(&self) -> &BlobMetadata {
&self.metadata
}
pub fn metadata_mut(&mut self) -> &mut BlobMetadata {
&mut self.metadata
}
pub fn len(&self) -> u64 {
self.data.len() as _
}
pub fn is_empty(&self) -> bool {
self.data.is_empty()
}
#[cfg(feature = "std")]
pub fn read(&self) -> BlobReader {
BlobReader(self.data.clone())
}
}