use crate::SolanaClientRateLimit;
use solana_client::nonblocking::rpc_client::RpcClient;
use solana_client::rpc_request::RpcRequest;
use std::sync::Arc;
pub struct SolanaClientRpc {
pub rpc_client: Arc<RpcClient>,
pub limits: Vec<SolanaClientRateLimit>,
}
impl SolanaClientRpc {
pub fn new(rpc_client: Arc<RpcClient>) -> Self {
Self {
rpc_client,
limits: Vec::new(),
}
}
pub fn add_limit(mut self, limit: SolanaClientRateLimit) -> Self {
self.limits.push(limit);
self
}
pub fn execute_endpoint(&mut self, endpoint: RpcRequest) -> bool {
for limit in &mut self.limits {
if !limit.check_endpoint(endpoint) {
return false;
}
}
for limit in &mut self.limits {
limit.apply_endpoint(endpoint);
}
true
}
pub fn execute_endpoints(&mut self, endpoints: &[RpcRequest]) -> bool {
for limit in &mut self.limits {
if !limit.check_endpoints(endpoints) {
return false;
}
}
for limit in &mut self.limits {
limit.apply_endpoints(endpoints);
}
true
}
}