Skip to main content

ContentAddressedArchive

Struct ContentAddressedArchive 

Source
pub struct ContentAddressedArchive {
    pub config: ArchiveConfig,
    pub index: ArchiveIndex,
    pub data: Vec<u8>,
}
Expand description

An append-only, content-addressed archive for storing immutable data blobs.

Data is kept in a flat in-memory byte array (data). Each entry records the offset and length of its blob so that slices can be returned without copying. Removed entries are tombstoned in their metadata; their bytes remain in the flat array but are excluded from all live-entry computations.

Fields§

§config: ArchiveConfig

Archive capacity and behaviour settings.

§index: ArchiveIndex

CID → entry index.

§data: Vec<u8>

Flat byte array holding all blob data (including tombstoned blobs).

Implementations§

Source§

impl ContentAddressedArchive

Source

pub fn new(config: ArchiveConfig) -> Self

Create a new, empty archive with the given configuration.

Source

pub fn is_full(&self) -> bool

Returns true when the archive has reached either of its capacity limits.

Source

pub fn put( &mut self, data: Vec<u8>, metadata: HashMap<String, String>, now: u64, ) -> Result<String, ArchiveError>

Insert a blob into the archive.

Computes the CID from data, checks for duplicates, enforces capacity limits, appends the bytes to the flat array, and records the entry.

Returns the computed CID on success.

Source

pub fn get(&self, cid: &str) -> Result<&[u8], ArchiveError>

Retrieve the raw bytes of the blob identified by cid.

Source

pub fn get_entry(&self, cid: &str) -> Result<&ArchiveEntry, ArchiveError>

Retrieve the metadata entry for the blob identified by cid.

Source

pub fn contains(&self, cid: &str) -> bool

Returns true if a live entry with cid exists.

Source

pub fn remove(&mut self, cid: &str) -> Result<Vec<u8>, ArchiveError>

Logically remove the entry for cid, returning the original blob bytes.

The entry is kept in the index with "_tombstone" = "true" in its metadata; the raw bytes remain in the flat data array.

Source

pub fn list_cids(&self) -> Vec<&str>

Return the sorted list of all live CID strings (alphabetical order).

Source

pub fn list_entries(&self) -> Vec<&ArchiveEntry>

Return live entries sorted by CID.

Source

pub fn total_data_bytes(&self) -> u64

Total bytes occupied by live entries.

Source

pub fn entry_count(&self) -> usize

Number of live entries.

Source

pub fn verify_integrity(&self) -> Vec<String>

Verify every live entry by recomputing its CID from stored bytes.

Returns the CIDs of entries where the recomputed CID differs from the recorded CID (indicating data corruption).

Source

pub fn export_entries(&self) -> Vec<ArchiveBlock>

Export all live entries as ArchiveBlock values.

Source

pub fn merge( &mut self, other: &ContentAddressedArchive, now: u64, ) -> Result<usize, ArchiveError>

Import all live entries from other that are not already present in self. Returns the number of entries added.

Entries that already exist (even as tombstones) in self are skipped.

Source

pub fn stats(&self) -> ArchiveStats

Compute aggregate statistics for the archive.

Trait Implementations§

Source§

impl Clone for ContentAddressedArchive

Source§

fn clone(&self) -> ContentAddressedArchive

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ContentAddressedArchive

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more