use std::sync::Arc;
use crate::client::Helius;
use crate::config::Config;
use crate::error::Result;
use crate::rpc_client::RpcClient;
use crate::types::Cluster;
use reqwest::Client;
pub struct HeliusFactory {
api_key: String,
client: Option<Client>,
}
impl HeliusFactory {
pub fn new(api_key: &str) -> Self {
HeliusFactory {
api_key: api_key.to_string(),
client: None,
}
}
pub fn with_client(&mut self, client: Client) -> &mut Self {
self.client = Some(client);
self
}
pub fn create(&self, cluster: Cluster) -> Result<Helius> {
let config: Arc<Config> = Arc::new(Config::new(&self.api_key, cluster)?);
let client: Client = self.client.clone().unwrap_or_default();
let rpc_client: Arc<RpcClient> = Arc::new(RpcClient::new(Arc::new(client.clone()), config.clone())?);
Ok(Helius {
config,
client,
rpc_client,
async_rpc_client: None,
ws_client: None,
})
}
}