pub struct ArchiveBackend { /* private fields */ }Expand description
Archive-backed crate::backend::MemBackend. Holds either the
on-disk path to the sealed zip or an in-memory byte buffer; opens
the archive lazily on each read call.
Implementations§
Source§impl ArchiveBackend
impl ArchiveBackend
Sourcepub fn new(archive_path: PathBuf) -> Self
pub fn new(archive_path: PathBuf) -> Self
Build a backend pointing at archive_path. The file is not
opened until the first read; constructor failure modes are
limited to argument validation done at the engine layer
(existence checks, extension checks).
Sourcepub fn from_bytes(bytes: Vec<u8>) -> Self
pub fn from_bytes(bytes: Vec<u8>) -> Self
Build a backend wrapping an in-memory archive byte buffer. The
engine’s byte-based hydrate path constructs this variant after
validating the bytes through extract_entries. Reads parse the
zip lazily on each call — same lifecycle as the path-based
variant.
Sourcepub fn archive_path(&self) -> Option<&Path>
pub fn archive_path(&self) -> Option<&Path>
Path of the archive this backend reads from, when the backend
was built from an on-disk file. None for byte-backed
instances.
Trait Implementations§
Source§impl MemBackend for ArchiveBackend
impl MemBackend for ArchiveBackend
Source§fn list_entities(&self) -> Result<Vec<PathBuf>, BackendError>
fn list_entities(&self) -> Result<Vec<PathBuf>, BackendError>
Source§fn read_entity(&self, rel_path: &Path) -> Result<Option<Vec<u8>>, BackendError>
fn read_entity(&self, rel_path: &Path) -> Result<Option<Vec<u8>>, BackendError>
rel_path. Ok(None) for a missing path
(idempotent reads); Err for IO or backend-specific failures.Source§fn write_entity(
&self,
_rel_path: &Path,
_content: &[u8],
) -> Result<(), BackendError>
fn write_entity( &self, _rel_path: &Path, _content: &[u8], ) -> Result<(), BackendError>
Source§fn delete_entity(&self, _rel_path: &Path) -> Result<(), BackendError>
fn delete_entity(&self, _rel_path: &Path) -> Result<(), BackendError>
rel_path. Idempotent: no-op when the path is already
absent. Pending until Self::commit.Source§fn move_entity(&self, _from: &Path, _to: &Path) -> Result<(), BackendError>
fn move_entity(&self, _from: &Path, _to: &Path) -> Result<(), BackendError>
Source§fn commit(
&self,
_message: &str,
_ctx: &CommitContext<'_>,
) -> Result<CommitId, BackendError>
fn commit( &self, _message: &str, _ctx: &CommitContext<'_>, ) -> Result<CommitId, BackendError>
CommitId; backends without history
return a synthetic id (UNIX-nanos + counter, hex) so callers
always get a non-empty cursor.Source§fn append_provenance(&self, _record: &Provenance) -> Result<(), BackendError>
fn append_provenance(&self, _record: &Provenance) -> Result<(), BackendError>
Provenance record to the backend’s mutation log.
Persistence form differs per backend — JSONL line, commit
trailer, etc. — but the in-memory shape is identical.Source§fn read_provenance(
&self,
_cursor: Option<&str>,
) -> Result<Vec<Provenance>, BackendError>
fn read_provenance( &self, _cursor: Option<&str>, ) -> Result<Vec<Provenance>, BackendError>
cursor (opaque,
backend-defined: a commit SHA for git-branch, an RFC-3339
timestamp for folder, ignored for archive). None cursor
means “from the beginning”.Source§fn read_mem_config(&self) -> Result<Option<Vec<u8>>, BackendError>
fn read_mem_config(&self) -> Result<Option<Vec<u8>>, BackendError>
.memstead/config.json payload, if any. Read moreSource§fn read_archive_provenance(&self) -> Result<Option<Vec<u8>>, BackendError>
fn read_archive_provenance(&self) -> Result<Option<Vec<u8>>, BackendError>
.memstead/provenance.json) the archive carries, if any. Read moreSource§fn read_anchors_sidecar(&self) -> Result<Option<Vec<u8>>, BackendError>
fn read_anchors_sidecar(&self) -> Result<Option<Vec<u8>>, BackendError>
crate::anchor::ANCHOR_SIDECAR_PATH) bytes, if any. Read moreSource§fn discard_pending(&self) -> Result<(), BackendError>
fn discard_pending(&self) -> Result<(), BackendError>
batch_update stages each item’s write into the
pending set, and when a later item fails validation it calls
this to drop the already-staged writes rather than commit a
half-applied batch. Idempotent — discarding an empty buffer
is a no-op. Read moreSource§fn commit_with_expected_parent(
&self,
message: &str,
ctx: &CommitContext<'_>,
_expected_parent: Option<&str>,
) -> Result<CommitId, BackendError>
fn commit_with_expected_parent( &self, message: &str, ctx: &CommitContext<'_>, _expected_parent: Option<&str>, ) -> Result<CommitId, BackendError>
expected_parent is Some, the backend MUST refuse the
commit (Err(BackendError::ParentMismatch { ... })) if its
current head no longer matches the supplied ref — a sibling
writer advanced the on-disk state between the snapshot the
caller pinned and now. When expected_parent is None, the
call is equivalent to Self::commit. Read moreSource§fn current_head(&self) -> Result<Option<String>, BackendError>
fn current_head(&self) -> Result<Option<String>, BackendError>
Engine instance, an
out-of-band git pull, etc.) advancing the on-disk state past
what the engine last read. Backends without history (folder,
archive) inherit the default impl returning Ok(None); the
engine treats None as “no drift signal available” and skips
drift detection for that mount. The git-branch backend
overrides to return the per-mem branch tip’s commit SHA hex. Read moreSource§fn write_mem_config(&self, _bytes: &[u8]) -> Result<(), BackendError>
fn write_mem_config(&self, _bytes: &[u8]) -> Result<(), BackendError>
.memstead/config.json payload. Symmetric
counterpart to Self::read_mem_config. Read moreSource§fn write_mem_config_with_note(
&self,
bytes: &[u8],
_note: Option<&str>,
) -> Result<(), BackendError>
fn write_mem_config_with_note( &self, bytes: &[u8], _note: Option<&str>, ) -> Result<(), BackendError>
Self::write_mem_config but records note (an optional
agent/operator-supplied provenance reason) on the resulting
commit body. The default delegates to the note-less form, so
backends without a commit (folder) simply ignore the note; the
git-branch backend overrides this to thread note into the
__MEMSTEAD-ref commit. Lets set_mem_version carry a --note
like the other commit-producing mem-lifecycle operations.Source§fn record_pipeline_edit(
&self,
_kind: &str,
_edits: &[(String, Option<Vec<u8>>)],
_note: Option<&str>,
_verb: &str,
) -> Result<(), BackendError>
fn record_pipeline_edit( &self, _kind: &str, _edits: &[(String, Option<Vec<u8>>)], _note: Option<&str>, _verb: &str, ) -> Result<(), BackendError>
.memstead/ on the workspace root — it has no
commit of its own — so backends with a commit timeline mirror the
edit into their provenance record; the commit is the audit trail,
the disk file stays the read path. Read moreSource§fn write_anchors_sidecar(&self, _bytes: &[u8]) -> Result<(), BackendError>
fn write_anchors_sidecar(&self, _bytes: &[u8]) -> Result<(), BackendError>
Source§fn delete_artifacts(&self) -> Result<(), BackendError>
fn delete_artifacts(&self) -> Result<(), BackendError>
memstead_mem_create (entity-seed commit on the per-mem
branch + Self::write_mem_config on __MEMSTEAD). Called by
memstead_mem_delete orchestration when delete_files=true and
the delete rule matched, to give the backend a chance to
prune ref-store state the engine alone has the git authority
to touch. Read moreAuto Trait Implementations§
impl Freeze for ArchiveBackend
impl RefUnwindSafe for ArchiveBackend
impl Send for ArchiveBackend
impl Sync for ArchiveBackend
impl Unpin for ArchiveBackend
impl UnsafeUnpin for ArchiveBackend
impl UnwindSafe for ArchiveBackend
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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