use serde::{Deserialize, Serialize};
use crate::{view::UserVO, DeltaError};
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) -> Result<Self, DeltaError> {
if from.pub_key != to.pub_key {
return Err(DeltaError::InvalidParamsError(
"user primary key not equal".to_string(),
));
}
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),
}
}
}