use serde::{Deserialize, Serialize};
use crate::{Equality, MaybeEq, Tracked};
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
pub struct Changeable<T> {
pub from: Tracked<T>,
pub to: Tracked<T>,
}
impl<T> Changeable<T>
where
T: MaybeEq,
{
pub fn new(from: Tracked<T>, to: Tracked<T>) -> Self {
Self { from, to }
}
pub fn known(from: T, to: T) -> Self {
let from = Tracked::Known(from);
let to = Tracked::Known(to);
Self { from, to }
}
pub fn equality(&self) -> Equality {
<Tracked<T> as MaybeEq>::maybe_eq(&self.from, &self.to)
}
}