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