Skip to main content

UpdateEntityArgs

Struct UpdateEntityArgs 

Source
pub struct UpdateEntityArgs {
    pub id: EntityId,
    pub expected_hash: Option<String>,
    pub sections: IndexMap<String, String>,
    pub append_sections: IndexMap<String, String>,
    pub patch_sections: IndexMap<String, PatchArg>,
    pub metadata: IndexMap<String, String>,
    pub metadata_unset: Vec<String>,
    pub dry_run: bool,
    pub declare_relations: Vec<RelateArg>,
    pub anchors: Vec<AnchorInput>,
    pub anchors_unset: Vec<AnchorUnsetInput>,
    pub relations_unset: Vec<RelationUnsetArg>,
}
Expand description

Arguments for [Engine::update_entity].

Fields§

§id: EntityId§expected_hash: Option<String>

Optimistic locking. None skips the check.

§sections: IndexMap<String, String>

Section keys whose body should be replaced wholesale. Empty values overwrite with empty content.

§append_sections: IndexMap<String, String>

Section keys whose body should be appended to. Existing body gets a \n separator before the append; empty/absent body is replaced wholesale with the append value (parity with full’s append-on-empty behaviour). The same key may not appear in both sections and append_sections; conflict is rejected with [EngineError::ConflictingSectionModes].

§patch_sections: IndexMap<String, PatchArg>

Section keys whose body should be patched via find-and- replace. Each value is a crate::ops::PatchArg with old, new, and all (replace every occurrence vs first only). Errors with [EngineError::PatchSectionEmpty] when the section is absent and [EngineError::PatchOldNotFound] when old doesn’t appear. Mutually exclusive with the other two section modes for the same key.

§metadata: IndexMap<String, String>

Metadata fields to set or replace. Values land as MetadataValue::String for V1.

§metadata_unset: Vec<String>

Metadata field keys to unset. Silently no-ops on absent keys.

§dry_run: bool

When true, validate and compute the prospective hash but do not write to disk, mutate the store, or commit. Outcome carries content_hash = the unchanged on-disk hash (so the caller can use it as expected_hash on the follow-up real call) and prospective_hash = the hash the entity would have after the proposed write. Wire-equivalent to full’s UpdateArgs.dry_run. Optimistic-lock check is skipped on the dry_run path so an agent can preview a change without holding a fresh hash — designated stale-hash recovery path.

§declare_relations: Vec<RelateArg>

Atomic batched relation declarations applied before the section/metadata changes land. Each entry is validated like any individual memstead_relate call (schema-shape, cross-mem policy, target-id grammar), appended to the entity’s relationships list, and — for absent Write-target peers — auto-stubbed in the target’s mem. The strict wiki-link/relation validator then runs against the post-mutation state with the freshly-declared relations already in place, so a body wiki-link added in the same memstead_update call passes the gate without a separate memstead_relate round-trip. Empty default — omit when no batched declarations are needed.

§anchors: Vec<AnchorInput>

Permissive anchors[] provenance records to attach to this entity — validated (crate::anchor::AnchorInput::validate) and, when non-empty, merged into the entity’s row in the mem-branch anchors sidecar in the SAME commit as the update so entity + anchors land atomically: an incoming anchor replaces the existing anchor with the same (artifact, grain, class) triple and appends otherwise — writing never removes an anchor this call did not name in Self::anchors_unset. Empty (the default) merges nothing and leaves the stored set untouched. A malformed element refuses the whole update with [EngineError::InvalidAnchor] (INVALID_ANCHOR) — nothing is written. Not folded into _hash (sidecar lives under .memstead/).

§anchors_unset: Vec<AnchorUnsetInput>

Explicit anchor removals, applied before the Self::anchors merge in the same mutation (mirroring the metadata_unset / relations_unset conventions). Each selector names an artifact and may narrow by grain and/or class; a bare artifact removes every anchor on it. Unsetting an anchor that does not exist is a no-op, not an error — removal is idempotent. A malformed selector refuses the whole update with [EngineError::InvalidAnchor].

§relations_unset: Vec<RelationUnsetArg>

Repair-shaped relation removals ({ rel_type, target }), applied atomically within this update. Accepted only when the entity currently FAILS the conformance check (against the effective schema) — a conformant entity refuses with REPAIR_NOT_NEEDED and stays unmodified; memstead_relate(remove) is the everyday detach path. Absent pairs are silent no-ops (symmetric with metadata_unset). The strict-write post-condition is unchanged: the post-repair entity must be integral or the whole update refuses with the relevant write-time code.

Trait Implementations§

Source§

impl Clone for UpdateEntityArgs

Source§

fn clone(&self) -> UpdateEntityArgs

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 UpdateEntityArgs

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> 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<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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Fruit for T
where T: Send + Downcast,

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> 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<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