use std::str::FromStr;
use clap::Parser;
use solana_sdk::{pubkey::Pubkey, signature::Signature};
mod account;
mod block;
mod transaction;
mod utils;
#[derive(Debug, Parser)]
#[clap(name = "solana command line explorer", author, version)]
pub struct ExplorerCli {
#[command(subcommand)]
command: Command,
#[arg(
long,
short = 'u',
default_value = "http://api.mainnet-beta.solana.com",
global = true
)]
rpc_url: String,
}
#[derive(Debug, Parser, Clone)]
pub enum Command {
Transaction(Transaction),
Account(Account),
Block(Block),
}
#[derive(Debug, Parser, Clone)]
pub struct Transaction {
#[clap(value_parser = Signature::from_str)]
signature: Signature,
}
#[derive(Debug, Parser, Clone)]
pub struct Account {
#[clap(value_parser = Pubkey::from_str)]
pubkey: Pubkey,
}
#[derive(Debug, Parser, Clone)]
pub struct Block {
#[clap()]
start: u64,
#[clap()]
end: Option<u64>,
#[clap(long, short, default_value_t = false)]
verbose: bool,
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
let args = ExplorerCli::parse();
match args.command {
Command::Transaction(transaction) => transaction::handler(args.rpc_url, transaction).await,
Command::Account(account) => account::handler(args.rpc_url, account).await,
Command::Block(block) => block::handler(args.rpc_url, block).await,
}
}