use crate::model::viewobject::CrdtEventVO;
use serde::{Deserialize, Serialize};
use signer_core::{SignerCrypted, SignerUser};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "poem-openapi", derive(poem_openapi::Object))]
pub struct CrdtCryptedEventVO {
pub clock: i32,
pub peer: String,
pub data: SignerCrypted<CrdtEventVO>,
}
impl CrdtCryptedEventVO {
pub fn from_data(
user: &SignerUser,
data: &CrdtEventVO,
) -> anyhow::Result<Self> {
let data = CrdtEventVO {
revert: None,
..data.clone()
};
Ok(Self {
clock: data.clock,
peer: data.peer.clone(),
data: SignerCrypted::create(user, &user.public.pub_key, data)?,
})
}
pub fn decrypt(&self, user: &SignerUser) -> anyhow::Result<CrdtEventVO> {
let data = self.data.decrypt(user)?;
Ok(CrdtEventVO {
revert: None,
..data
})
}
}