use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChainRpcConfig {
pub rpc_url: String,
#[serde(default = "default_max_retries")]
pub max_retries: u32,
#[serde(default = "default_backoff_ms")]
pub backoff_ms: u64,
#[serde(default)]
pub filter_addresses: Vec<String>,
}
fn default_max_retries() -> u32 { 5 }
fn default_backoff_ms() -> u64 { 500 }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StreamConfig {
pub chains: HashMap<String, ChainRpcConfig>,
#[serde(default)]
pub schemas: Vec<String>,
#[serde(default = "default_channel_capacity")]
pub channel_capacity: usize,
#[serde(default = "bool_true")]
pub skip_unknown: bool,
}
fn default_channel_capacity() -> usize { 1_024 }
fn bool_true() -> bool { true }
impl StreamConfig {
pub fn single_chain(chain: impl Into<String>, rpc_url: impl Into<String>) -> Self {
let mut chains = HashMap::new();
chains.insert(
chain.into(),
ChainRpcConfig {
rpc_url: rpc_url.into(),
max_retries: 5,
backoff_ms: 500,
filter_addresses: vec![],
},
);
Self {
chains,
schemas: vec![],
channel_capacity: 1_024,
skip_unknown: true,
}
}
}