signer-daemon 0.3.2

Signer daemon package.
Documentation
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) -> crate::DaemonResult<Self> {
        if from.addr != to.addr {
            return Err(crate::DaemonError::Signer(crate::SignerError::Msg(
                "server primary key not equal".to_string(),
            )));
        }

        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),
        }
    }
}