starkli 0.1.2

Starkli (/ˈstɑːrklaɪ/), a blazing fast CLI tool for Starknet powered by starknet-rs
use anyhow::Result;
use clap::Parser;
use colored_json::{ColorMode, Output};
use starknet::providers::Provider;

use crate::{utils::parse_block_id, ProviderArgs};

#[derive(Debug, Parser)]
pub struct Block {
    #[clap(flatten)]
    provider: ProviderArgs,
    #[clap(long, help = "Fetch full transactions instead of hashes only")]
    full: bool,
    #[clap(
        default_value = "latest",
        help = "Block number, hash, or tag (latest/pending)"
    )]
    block_id: String,
}

impl Block {
    pub async fn run(self) -> Result<()> {
        let provider = self.provider.into_provider();

        let block_id = parse_block_id(&self.block_id)?;

        let block_json = if self.full {
            serde_json::to_value(provider.get_block_with_txs(block_id).await?)?
        } else {
            serde_json::to_value(provider.get_block_with_tx_hashes(block_id).await?)?
        };

        let block_json =
            colored_json::to_colored_json(&block_json, ColorMode::Auto(Output::StdOut))?;
        println!("{block_json}");

        Ok(())
    }
}