signer-daemon 0.2.1

Signer daemon package.
Documentation
use anyhow::bail;
use serde::{Deserialize, Serialize};

use crate::model::viewobject::UserVO;

use super::deltaobject::DeltaField;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserDO {
  pub pub_key: String,
  pub user_public: DeltaField<String>,
  pub signed_user_public: DeltaField<String>,
}

impl UserDO {
  pub fn new(from: &UserVO, to: &UserVO) -> anyhow::Result<Self> {
    if from.pub_key != to.pub_key {
      bail!("user primary key not equal")
    }

    Ok(Self {
      pub_key: from.pub_key.clone(),
      user_public: DeltaField::new(&from.user_public, &to.user_public),
      signed_user_public: DeltaField::new(
        &from.signed_user_public,
        &to.signed_user_public,
      ),
    })
  }

  pub fn has_changed(&self, vo: &UserVO) -> bool {
    if let DeltaField::Set(val) = &self.user_public {
      if *val != vo.user_public {
        return true;
      }
    }
    if let DeltaField::Set(val) = &self.signed_user_public {
      if *val != vo.signed_user_public {
        return true;
      }
    }

    false
  }
}

impl From<UserVO> for UserDO {
  fn from(value: UserVO) -> Self {
    Self {
      pub_key: value.pub_key,
      user_public: DeltaField::Set(value.user_public),
      signed_user_public: DeltaField::Set(value.signed_user_public),
    }
  }
}