signer-daemon 0.2.5

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

use crate::model::viewobject::ServerVO;

use super::deltaobject::DeltaField;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerDO {
  pub addr: String,
  pub enable: DeltaField<bool>,
  pub limitation_set: DeltaField<String>,
}

impl ServerDO {
  pub fn new(from: &ServerVO, to: &ServerVO) -> anyhow::Result<Self> {
    if from.addr != to.addr {
      bail!("server primary key not equal")
    }

    Ok(Self {
      addr: from.addr.clone(),
      enable: DeltaField::new(&from.enable, &to.enable),
      limitation_set: DeltaField::new(&from.limitation_set, &to.limitation_set),
    })
  }

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

    false
  }
}

impl From<ServerVO> for ServerDO {
  fn from(value: ServerVO) -> Self {
    Self {
      addr: value.addr,
      enable: DeltaField::Set(value.enable),
      limitation_set: DeltaField::Set(value.limitation_set),
    }
  }
}