spark_rust/wallet/
client.rs1use super::leaf_manager::LeafManager;
2use crate::error::SparkSdkError;
3use crate::signer::default_signer::DefaultSigner;
4use crate::signer::traits::SparkSigner;
5use crate::wallet::config::WalletConfig;
6use parking_lot::RwLock as PlRwLock;
7use std::sync::Arc;
8
9#[derive(Clone)]
11pub struct SparkSdk<S: SparkSigner + Send + Sync = DefaultSigner> {
12 pub(crate) config: WalletConfig,
14
15 pub(crate) signer: Arc<S>,
17
18 pub(crate) leaf_manager: Arc<LeafManager>,
20
21 pub(crate) session: Arc<PlRwLock<Vec<Session>>>,
23}
24
25impl<S: SparkSigner + Send + Sync> SparkSdk<S> {
26 pub(crate) fn add_authorization_header_to_request<T>(
28 &self,
29 request: &mut tonic::Request<T>,
30 index: Option<u32>,
31 ) {
32 let index = index.unwrap_or_else(|| self.config.spark_config.coordinator_index);
33 request.metadata_mut().insert(
34 "authorization",
35 self.session.read().clone()[index as usize]
36 .session_token
37 .clone()
38 .to_string()
39 .parse()
40 .unwrap(),
41 );
42 }
43
44 #[cfg(any(test, feature = "integration-tests"))]
45 pub fn cleanup(&self) -> Result<(), SparkSdkError> {
46 Ok(())
55 }
56}
57
58#[derive(Debug, Clone)]
60pub struct Session {
61 pub(crate) session_token: String,
63
64 pub(crate) _expiration_timestamp: i64, }