signer-crdt 0.4.1

Signer CRDT (Conflict-free Replicated Data Type) package.
Documentation
use sea_orm::ActiveValue;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DeltaField<T> {
    Set(T),
    NotSet,
}

impl<T> DeltaField<T>
where
    T: PartialEq + Clone,
{
    pub fn new(from: &T, to: &T) -> Self {
        if from == to {
            return DeltaField::NotSet;
        } else {
            return DeltaField::Set(to.clone());
        }
    }

    pub fn unwrap_ref(&self) -> &T {
        match self {
            DeltaField::Set(val) => val,
            DeltaField::NotSet => panic!("DeltaField::NotSet"),
        }
    }
}

impl<T> Into<ActiveValue<T>> for DeltaField<T>
where
    T: Into<sea_orm::Value>,
{
    fn into(self) -> ActiveValue<T> {
        match self {
            DeltaField::Set(val) => ActiveValue::Set(val),
            DeltaField::NotSet => ActiveValue::NotSet,
        }
    }
}