ev_client/
signer.rs

1use crate::{client::Client, error::Result};
2use ev_types::v1::{
3    signer_service_client::SignerServiceClient, GetPublicRequest, GetPublicResponse, SignRequest,
4    SignResponse,
5};
6use tonic::Request;
7
8pub struct SignerClient {
9    inner: SignerServiceClient<tonic::transport::Channel>,
10}
11
12impl SignerClient {
13    /// Create a new SignerClient from a Client
14    pub fn new(client: &Client) -> Self {
15        let inner = SignerServiceClient::new(client.channel().clone());
16        Self { inner }
17    }
18
19    /// Sign a message
20    pub async fn sign(&self, message: Vec<u8>) -> Result<Vec<u8>> {
21        let request = Request::new(SignRequest { message });
22        let response = self.inner.clone().sign(request).await?;
23
24        Ok(response.into_inner().signature)
25    }
26
27    /// Get the public key
28    pub async fn get_public_key(&self) -> Result<Vec<u8>> {
29        let request = Request::new(GetPublicRequest {});
30        let response = self.inner.clone().get_public(request).await?;
31
32        Ok(response.into_inner().public_key)
33    }
34
35    /// Get the full sign response
36    pub async fn sign_full(&self, message: Vec<u8>) -> Result<SignResponse> {
37        let request = Request::new(SignRequest { message });
38        let response = self.inner.clone().sign(request).await?;
39
40        Ok(response.into_inner())
41    }
42
43    /// Get the full public key response
44    pub async fn get_public_full(&self) -> Result<GetPublicResponse> {
45        let request = Request::new(GetPublicRequest {});
46        let response = self.inner.clone().get_public(request).await?;
47
48        Ok(response.into_inner())
49    }
50}