pub struct CacheInstallOutcome {
pub mem_name: String,
pub schema: SchemaRef,
pub cache_path: PathBuf,
pub cache_key: String,
pub copied_to_cache: bool,
pub schema_files: Vec<(String, Vec<u8>)>,
pub warnings: Vec<WarningHint>,
}Expand description
Install a sealed mem archive into the global cache and register
it in a writable mem’s config. Accepts the .mem archive format.
Two independent side effects, both idempotent:
- If the content-addressed cache file does not exist: run the submitted bytes
through
validate_and_normalize_archiveand write the validator’scanonical_bytesvia a.tmpsibling + atomic rename. A mid-write crash leaves the temp file behind, never a partial cache file. Existing cache files are left untouched — overwrite-on-newer-version is an app-level update flow, not a CLI install semantic. Users who want to force-replace can delete the cache file first. - If the target mem’s config does not already list this mem
under
readMems, add an entry withsource: { type: "local" }. Existing entries are left untouched so re-running install never clobbers atype: "url"(etc.) source the user configured by hand.
The target parameter selects where the registration lands:
TargetMem::Disk(mem_dir)writes the updated config back to<mem_dir>/.memstead/config.json(legacy disk shape).TargetMem::MemRepo { workspace_root, mem_name }commits the updatedconfigs/<mem_name>.jsontomem-repo-git:main(post- cutover shape).
ctx and commit_message are used only by the MemRepo arm —
the disk arm rewrites the file via the existing config-update path
which has its own (file-mtime-based) provenance trail.
Returns an InstallOutcome describing which effects fired. The
authoritative mem name comes from the validator’s approved
config, not from the submitted filename or caller argument.
Outcome of install_to_cache — the cache-side half of an
install, with everything the caller needs to register the archive
as a workspace-level read-only mount.
Fields§
§mem_name: StringMem name, taken from the validator’s approved config — the archive’s sole identity.
schema: SchemaRefThe archive’s schema pin, from its bundled config.
cache_path: PathBufContent-addressed cache file the mount’s Archive storage
points at.
cache_key: StringThe content digest half of the cache filename.
copied_to_cache: booltrue if canonical bytes were written on this call; false
on the idempotent dedup path.
schema_files: Vec<(String, Vec<u8>)>The archive’s embedded schema package, package-relative
(schema.yaml, types/<t>.yaml, schema-format.json) and
byte-verbatim. Carried out of the validator because the mount
that follows can only be registered once this schema resolves,
and for a third party’s vocabulary the archive is the only
place it exists. Empty when the archive embeds no schema tree.
warnings: Vec<WarningHint>Typed non-fatal issues surfaced by the install.
Trait Implementations§
Source§impl Clone for CacheInstallOutcome
impl Clone for CacheInstallOutcome
Source§fn clone(&self) -> CacheInstallOutcome
fn clone(&self) -> CacheInstallOutcome
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for CacheInstallOutcome
impl RefUnwindSafe for CacheInstallOutcome
impl Send for CacheInstallOutcome
impl Sync for CacheInstallOutcome
impl Unpin for CacheInstallOutcome
impl UnsafeUnpin for CacheInstallOutcome
impl UnwindSafe for CacheInstallOutcome
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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