signer-daemon 0.3.2

Signer daemon package.
Documentation
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)
    }
}