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}