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