use serde::{Deserialize, Serialize};
use signer_core::{SignerSigned, SignerUser, SignerUserPublic};
use crate::entity::user;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UserVO {
pub pub_key: String,
pub user_public: String,
pub signed_user_public: String,
}
impl From<user::Model> for UserVO {
fn from(value: user::Model) -> Self {
Self {
pub_key: value.pub_key,
user_public: value.user_public,
signed_user_public: value.signed_user_public,
}
}
}
impl UserVO {
pub async fn from_signer_user(su: SignerUser) -> crate::DaemonResult<Self> {
let up = &su.public;
let vo = Self {
pub_key: up.pub_key.clone(),
user_public: serde_json::to_string(up)?,
signed_user_public: serde_json::to_string(&SignerSigned::from_value(&su, up)?)?,
};
Ok(vo)
}
}
impl Into<user::Model> for UserVO {
fn into(self) -> user::Model {
user::Model {
pub_key: self.pub_key,
user_public: self.user_public,
signed_user_public: self.signed_user_public,
}
}
}
impl UserVO {
pub fn public(&self) -> crate::DaemonResult<SignerUserPublic> {
let user_public = serde_json::from_str(&self.user_public)?;
Ok(user_public)
}
}