stratus/eth/rpc/
rpc_config.rs1use std::collections::HashSet;
2use std::net::SocketAddr;
3
4use anyhow::bail;
5use clap::Parser;
6
7use super::RpcClientApp;
8
9#[derive(Parser, Clone, serde::Serialize)]
10pub struct RpcServerConfig {
11 #[arg(short = 'a', long = "address", env = "ADDRESS", default_value = "0.0.0.0:3000")]
13 pub rpc_address: SocketAddr,
14
15 #[arg(long = "max-connections", env = "MAX_CONNECTIONS", default_value = "400")]
17 pub rpc_max_connections: u32,
18
19 #[arg(long = "max-response-size-bytes", env = "MAX_RESPONSE_SIZE_BYTES", default_value = "10485760")]
21 pub rpc_max_response_size_bytes: u32,
22
23 #[arg(long = "max-subscriptions", env = "MAX_SUBSCRIPTIONS", default_value = "30")]
25 pub rpc_max_subscriptions: u32,
26
27 #[arg(long = "health-check-interval", env = "HEALTH_CHECK_INTERVAL_MS", default_value = "100")]
29 pub health_check_interval_ms: u64,
30
31 #[arg(long = "batch-request-limit", env = "BATCH_REQUEST_LIMIT", default_value = "500")]
33 pub batch_request_limit: u32,
34
35 #[arg(long = "rpc-debug-trace-unsuccessful-only", value_parser=Self::parse_rpc_client_app_hashset ,env = "RPC_DEBUG_TRACE_UNSUCCESSFUL_ONLY")]
36 pub rpc_debug_trace_unsuccessful_only: Option<HashSet<RpcClientApp>>,
37}
38
39impl RpcServerConfig {
40 pub fn parse_rpc_client_app_hashset(input: &str) -> anyhow::Result<HashSet<RpcClientApp>> {
41 if input.is_empty() {
42 bail!("invalid client list");
43 }
44
45 let set: HashSet<RpcClientApp> = input.split(',').map(|s| RpcClientApp::parse(s.trim())).collect();
46
47 if set.is_empty() { bail!("invalid client list") } else { Ok(set) }
48 }
49}