1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
use crate::{input_validators::*, ArgConstant}; use clap::{App, Arg}; pub const BLOCKHASH_ARG: ArgConstant<'static> = ArgConstant { name: "blockhash", long: "blockhash", help: "Use the supplied blockhash", }; pub const SIGN_ONLY_ARG: ArgConstant<'static> = ArgConstant { name: "sign_only", long: "sign-only", help: "Sign the transaction offline", }; pub const SIGNER_ARG: ArgConstant<'static> = ArgConstant { name: "signer", long: "signer", help: "Provide a public-key/signature pair for the transaction", }; pub fn blockhash_arg<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name(BLOCKHASH_ARG.name) .long(BLOCKHASH_ARG.long) .takes_value(true) .value_name("BLOCKHASH") .validator(is_hash) .help(BLOCKHASH_ARG.help) } pub fn sign_only_arg<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name(SIGN_ONLY_ARG.name) .long(SIGN_ONLY_ARG.long) .takes_value(false) .requires(BLOCKHASH_ARG.name) .help(SIGN_ONLY_ARG.help) } fn signer_arg<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name(SIGNER_ARG.name) .long(SIGNER_ARG.long) .takes_value(true) .value_name("PUBKEY=SIGNATURE") .validator(is_pubkey_sig) .requires(BLOCKHASH_ARG.name) .multiple(true) .help(SIGNER_ARG.help) } pub trait OfflineArgs { fn offline_args(self, global: bool) -> Self; } impl OfflineArgs for App<'_, '_> { fn offline_args(self, global: bool) -> Self { self.arg(blockhash_arg().global(global)) .arg(sign_only_arg().global(global)) .arg(signer_arg().global(global)) } }