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