signer-daemon 0.3.0

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) -> anyhow::Result<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) -> anyhow::Result<SignerUserPublic> {
    let user_public = serde_json::from_str(&self.user_public)?;
    Ok(user_public)
  }
}