Skip to main content

Diff

Struct Diff 

Source
pub struct Diff<'a> {
    pub changes: &'a [Change<'a>],
}
Expand description

What changed in a write, as the applicability index’s key.

The diff has to be computed to evaluate anything, so diffing is the indexing step: a write’s changed paths are walked through the tree once, and a write matching no policy has paid only for that walk.

The contract is exact: changes holds every path whose value differs between before and after, where absence is a value — so a create lists every path it introduces, a delete lists every path it removes, and there is no case where an evaluator sees an empty diff for a write that changed something. The server computes this, holding both sides of the write already, so it is enforced once in the write path rather than trusted from whatever produced the write.

This is a minimal, storage-agnostic view, deliberately not the richer diff type that didbot-data’s merkle search tree produces. That type carries proof material this crate has no use for, and coupling the policy core to one storage engine’s diff shape would be a dependency in the wrong direction.

Fields§

§changes: &'a [Change<'a>]

Every path that changed, each with its value before and after.

Trait Implementations§

Source§

impl<'a> Clone for Diff<'a>

Source§

fn clone(&self) -> Diff<'a>

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<'a> Debug for Diff<'a>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'a> Default for Diff<'a>

Source§

fn default() -> Diff<'a>

Returns the “default value” for a type. Read more
Source§

impl<'a> PartialEq for Diff<'a>

Source§

fn eq(&self, other: &Diff<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> Copy for Diff<'a>

Source§

impl<'a> Eq for Diff<'a>

Source§

impl<'a> StructuralPartialEq for Diff<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for Diff<'a>

§

impl<'a> RefUnwindSafe for Diff<'a>

§

impl<'a> Send for Diff<'a>

§

impl<'a> Sync for Diff<'a>

§

impl<'a> Unpin for Diff<'a>

§

impl<'a> UnsafeUnpin for Diff<'a>

§

impl<'a> UnwindSafe for Diff<'a>

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
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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