chaincodec_stream/
config.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ChainRpcConfig {
9 pub rpc_url: String,
11 #[serde(default = "default_max_retries")]
13 pub max_retries: u32,
14 #[serde(default = "default_backoff_ms")]
16 pub backoff_ms: u64,
17 #[serde(default)]
19 pub filter_addresses: Vec<String>,
20}
21
22fn default_max_retries() -> u32 { 5 }
23fn default_backoff_ms() -> u64 { 500 }
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct StreamConfig {
28 pub chains: HashMap<String, ChainRpcConfig>,
30 #[serde(default)]
32 pub schemas: Vec<String>,
33 #[serde(default = "default_channel_capacity")]
35 pub channel_capacity: usize,
36 #[serde(default = "bool_true")]
38 pub skip_unknown: bool,
39}
40
41fn default_channel_capacity() -> usize { 1_024 }
42fn bool_true() -> bool { true }
43
44impl StreamConfig {
45 pub fn single_chain(chain: impl Into<String>, rpc_url: impl Into<String>) -> Self {
47 let mut chains = HashMap::new();
48 chains.insert(
49 chain.into(),
50 ChainRpcConfig {
51 rpc_url: rpc_url.into(),
52 max_retries: 5,
53 backoff_ms: 500,
54 filter_addresses: vec![],
55 },
56 );
57 Self {
58 chains,
59 schemas: vec![],
60 channel_capacity: 1_024,
61 skip_unknown: true,
62 }
63 }
64}