use serde::{Deserialize, Serialize};
use solana_commitment_config::CommitmentConfig;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderConfig {
pub name: String,
pub rpc_url: String,
pub rate_limit: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RpcClientConfig {
pub providers: Vec<ProviderConfig>,
#[serde(flatten)]
pub commitment: CommitmentConfig,
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_config_loading() {
let config_str = r#"
{
"commitment": "confirmed",
"providers": [
{
"name": "provider1",
"rpc_url": "https://provider1.com",
"rate_limit": 1000
},
{
"name": "provider2",
"rpc_url": "https://provider2.com",
"rate_limit": 500
}
]
}"#;
let config: RpcClientConfig = serde_json::de::from_str(config_str).unwrap();
assert_eq!(config.providers.len(), 2);
assert_eq!(config.providers[0].name, "provider1");
assert_eq!(config.providers[1].rate_limit, 500);
}
}