Introduce rpc url monikers for cli (#14409)
* Introduce rpc url monikers for cli * Use https:// and support initials as well
This commit is contained in:
parent
ffbbffe42a
commit
54a5876c48
|
@ -148,6 +148,33 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_url_or_moniker<T>(string: T) -> Result<(), String>
|
||||||
|
where
|
||||||
|
T: AsRef<str> + Display,
|
||||||
|
{
|
||||||
|
match url::Url::parse(&normalize_to_url_if_moniker(string.as_ref())) {
|
||||||
|
Ok(url) => {
|
||||||
|
if url.has_host() {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err("no host provided".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => Err(format!("{}", err)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn normalize_to_url_if_moniker(url_or_moniker: &str) -> String {
|
||||||
|
match url_or_moniker {
|
||||||
|
"m" | "mainnet-beta" => "https://api.mainnet-beta.solana.com",
|
||||||
|
"t" | "testnet" => "https://testnet.solana.com",
|
||||||
|
"d" | "devnet" => "https://devnet.solana.com",
|
||||||
|
"l" | "localhost" => "http://localhost:8899",
|
||||||
|
url => url,
|
||||||
|
}
|
||||||
|
.to_string()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_epoch<T>(epoch: T) -> Result<(), String>
|
pub fn is_epoch<T>(epoch: T) -> Result<(), String>
|
||||||
where
|
where
|
||||||
T: AsRef<str> + Display,
|
T: AsRef<str> + Display,
|
||||||
|
|
|
@ -465,11 +465,12 @@ impl CliConfig<'_> {
|
||||||
json_rpc_cmd_url: &str,
|
json_rpc_cmd_url: &str,
|
||||||
json_rpc_cfg_url: &str,
|
json_rpc_cfg_url: &str,
|
||||||
) -> (SettingType, String) {
|
) -> (SettingType, String) {
|
||||||
Self::first_nonempty_setting(vec![
|
let (setting_type, url_or_moniker) = Self::first_nonempty_setting(vec![
|
||||||
(SettingType::Explicit, json_rpc_cmd_url.to_string()),
|
(SettingType::Explicit, json_rpc_cmd_url.to_string()),
|
||||||
(SettingType::Explicit, json_rpc_cfg_url.to_string()),
|
(SettingType::Explicit, json_rpc_cfg_url.to_string()),
|
||||||
(SettingType::SystemDefault, Self::default_json_rpc_url()),
|
(SettingType::SystemDefault, Self::default_json_rpc_url()),
|
||||||
])
|
]);
|
||||||
|
(setting_type, normalize_to_url_if_moniker(&url_or_moniker))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn compute_keypair_path_setting(
|
pub fn compute_keypair_path_setting(
|
||||||
|
|
|
@ -7,7 +7,7 @@ use console::style;
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::{
|
||||||
commitment::COMMITMENT_ARG,
|
commitment::COMMITMENT_ARG,
|
||||||
input_parsers::commitment_of,
|
input_parsers::commitment_of,
|
||||||
input_validators::is_url,
|
input_validators::{is_url, is_url_or_moniker},
|
||||||
keypair::{CliSigners, DefaultSigner, SKIP_SEED_PHRASE_VALIDATION_ARG},
|
keypair::{CliSigners, DefaultSigner, SKIP_SEED_PHRASE_VALIDATION_ARG},
|
||||||
DisplayError,
|
DisplayError,
|
||||||
};
|
};
|
||||||
|
@ -246,11 +246,14 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
Arg::with_name("json_rpc_url")
|
Arg::with_name("json_rpc_url")
|
||||||
.short("u")
|
.short("u")
|
||||||
.long("url")
|
.long("url")
|
||||||
.value_name("URL")
|
.value_name("URL_OR_MONIKER")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.global(true)
|
.global(true)
|
||||||
.validator(is_url)
|
.validator(is_url_or_moniker)
|
||||||
.help("JSON RPC URL for the solana cluster"),
|
.help(
|
||||||
|
"URL for Solana's JSON RPC or moniker (or their first letter): \
|
||||||
|
[mainnet-beta, testnet, devnet, localhost]",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("websocket_url")
|
Arg::with_name("websocket_url")
|
||||||
|
|
Loading…
Reference in New Issue