signer-daemon 0.2.1

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

use super::deltaobject::DeltaField;
use crate::model::viewobject::OperLogVO;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OperLogDO {
  pub id: String,
  pub title: DeltaField<String>,
  pub content: DeltaField<String>,
  pub level: DeltaField<String>,
  pub create_time: DeltaField<i64>,
}

impl OperLogDO {
  pub fn new(from: &OperLogVO, to: &OperLogVO) -> anyhow::Result<Self> {
    if from.id != to.id {
      bail!("oper_log primary not equal")
    }

    Ok(Self {
      id: from.id.clone(),
      title: DeltaField::new(&from.title, &to.title),
      content: DeltaField::new(&from.content, &to.content),
      level: DeltaField::new(&from.level, &to.level),
      create_time: DeltaField::new(&from.create_time, &to.create_time),
    })
  }

  pub fn has_changed(&self, vo: &OperLogVO) -> bool {
    if let DeltaField::Set(val) = &self.title {
      if *val != vo.title {
        return true;
      }
    }
    if let DeltaField::Set(val) = &self.content {
      if *val != vo.content {
        return true;
      }
    }
    if let DeltaField::Set(val) = &self.level {
      if *val != vo.level {
        return true;
      }
    }
    if let DeltaField::Set(val) = &self.create_time {
      if *val != vo.create_time {
        return true;
      }
    }
    false
  }
}

impl From<OperLogVO> for OperLogDO {
  fn from(value: OperLogVO) -> Self {
    Self {
      id: value.id,
      title: DeltaField::Set(value.title),
      content: DeltaField::Set(value.content),
      level: DeltaField::Set(value.level),
      create_time: DeltaField::Set(value.create_time),
    }
  }
}