identity_diff/traits.rs
1// Copyright 2020-2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use serde::Deserialize;
5use serde::Serialize;
6use std::fmt::Debug;
7
8/// The primary `Diff` Trait type.
9pub trait Diff: Clone + Debug + PartialEq {
10 /// The Corresponding Diff Type for the implemented Type.
11 type Type: Sized + Clone + Debug + PartialEq + for<'de> Deserialize<'de> + Serialize;
12
13 /// Finds the difference between two types; `self` and `other` and returns `Self::Type`
14 fn diff(&self, other: &Self) -> crate::Result<Self::Type>;
15
16 /// Merges a `Self::Type` with `Self`
17 fn merge(&self, diff: Self::Type) -> crate::Result<Self>;
18
19 /// Converts a `diff` of type `Self::Type` to a `Self`.
20 fn from_diff(diff: Self::Type) -> crate::Result<Self>;
21
22 /// Converts a type of `Self` to a `diff` of `Self::Type`.
23 fn into_diff(self) -> crate::Result<Self::Type>;
24}