jam_tooling/
args.rs

1use jsonrpsee::ws_client::{WsClient, WsClientBuilder};
2
3#[derive(clap::Args, Debug)]
4#[group(skip)]
5pub struct CommonArgs {
6	/// The URL for the RPC connection.
7	#[arg(long, env = "JAM_RPC", default_value_t = String::from("ws://localhost:19800"))]
8	pub rpc: String,
9}
10
11impl CommonArgs {
12	pub async fn connect_rpc(&self, val_index: u16) -> anyhow::Result<WsClient> {
13		let mut uri = url::Url::parse(&self.rpc)?;
14		if val_index > 0 && uri.port().is_none() {
15			return Err(anyhow::anyhow!("Cannot increment port number for RPC URL without a port"));
16		}
17		uri.set_port(uri.port().map(|p| p.saturating_add(val_index)))
18			.map_err(|()| anyhow::anyhow!("Cannot set port number for RPC URL"))?;
19		Ok(WsClientBuilder::default()
20			.max_request_size(MAX_REQUEST_SIZE)
21			.max_response_size(MAX_RESPONSE_SIZE)
22			.build(&uri)
23			.await?)
24	}
25}
26
27const MAX_REQUEST_SIZE: u32 = 100 * 1024 * 1024;
28const MAX_RESPONSE_SIZE: u32 = 100 * 1024 * 1024;