Trait structdiff::StructDiff
source · pub trait StructDiff {
type Diff: Clone;
type DiffRef<'target>: Clone + Into<Self::Diff>
where Self: 'target;
// Required methods
fn diff(&self, updated: &Self) -> Vec<Self::Diff>;
fn diff_ref<'target>(
&'target self,
updated: &'target Self
) -> Vec<Self::DiffRef<'target>>;
fn apply_single(&mut self, diff: Self::Diff);
// Provided methods
fn apply(self, diffs: Vec<Self::Diff>) -> Self
where Self: Sized { ... }
fn apply_ref(&self, diffs: Vec<Self::Diff>) -> Self
where Self: Clone { ... }
fn apply_mut(&mut self, diffs: Vec<Self::Diff>) { ... }
}
Required Associated Types§
Required Methods§
sourcefn diff(&self, updated: &Self) -> Vec<Self::Diff>
fn diff(&self, updated: &Self) -> Vec<Self::Diff>
Generate a diff between two instances of a struct. This diff may be serialized if one of the serialization features is enabled.
use structdiff::{Difference, StructDiff};
#[derive(Debug, PartialEq, Clone, Difference)]
struct Example {
field1: f64,
}
let first = Example {
field1: 0.0,
};
let second = Example {
field1: 3.14,
};
let diffs: Vec<<Example as StructDiff>::Diff> = first.diff(&second);
let diffed = first.apply(diffs);
assert_eq!(diffed, second);
sourcefn diff_ref<'target>(
&'target self,
updated: &'target Self
) -> Vec<Self::DiffRef<'target>>
fn diff_ref<'target>( &'target self, updated: &'target Self ) -> Vec<Self::DiffRef<'target>>
Generate a diff between two instances of a struct, for use in passing to serializer. Much more efficient for structs with large fields where the diff will not be stored.
use structdiff::{Difference, StructDiff};
#[derive(Debug, PartialEq, Clone, Difference)]
struct Example {
field1: f64,
}
let first = Example {
field1: 0.0,
};
let second = Example {
field1: 3.14,
};
let diffs: Vec<<Example as StructDiff>::DiffRef<'_>> = first.diff_ref(&second);
let diffed = first.clone().apply(diffs.into_iter().map(Into::into).collect());
assert_eq!(diffed, second);
sourcefn apply_single(&mut self, diff: Self::Diff)
fn apply_single(&mut self, diff: Self::Diff)
Apply a single-field diff to a mutable self ref
Provided Methods§
sourcefn apply(self, diffs: Vec<Self::Diff>) -> Selfwhere
Self: Sized,
fn apply(self, diffs: Vec<Self::Diff>) -> Selfwhere
Self: Sized,
Apply a full diff to an owned self
Object Safety§
This trait is not object safe.