lighter_rust/client/
signer_client.rs1use crate::client::ApiClient;
2use crate::error::Result;
3use crate::nonce::NonceManager;
4use crate::signers::{EthereumSigner, Signer};
5use std::sync::Arc;
6
7#[derive(Debug)]
8pub struct SignerClient {
9 api_client: ApiClient,
10 signer: Arc<dyn Signer + Send + Sync>,
11 nonce_manager: Arc<NonceManager>,
12}
13
14impl SignerClient {
15 pub fn new(api_client: ApiClient, signer: Arc<dyn Signer + Send + Sync>) -> Self {
16 Self {
17 api_client,
18 signer,
19 nonce_manager: Arc::new(NonceManager::new()),
20 }
21 }
22
23 pub fn with_ethereum_signer(api_client: ApiClient, private_key: &str) -> Result<Self> {
24 let ethereum_signer = EthereumSigner::from_private_key(private_key)?;
25 let signer: Arc<dyn Signer + Send + Sync> = Arc::new(ethereum_signer);
26
27 Ok(Self::new(api_client, signer))
28 }
29
30 pub fn api_client(&self) -> &ApiClient {
31 &self.api_client
32 }
33
34 pub fn signer(&self) -> &Arc<dyn Signer + Send + Sync> {
35 &self.signer
36 }
37
38 pub fn generate_nonce(&self) -> Result<u64> {
39 self.nonce_manager.generate()
40 }
41
42 pub fn get_address(&self) -> Result<String> {
43 self.signer.get_address()
44 }
45}
46
47impl Clone for SignerClient {
48 fn clone(&self) -> Self {
49 Self {
50 api_client: self.api_client.clone(),
51 signer: self.signer.clone(),
52 nonce_manager: self.nonce_manager.clone(),
53 }
54 }
55}