solana/rpc-client/src/spinner.rs

43 lines
1.4 KiB
Rust

#![cfg(feature = "spinner")]
//! Spinner creator.
//! This module is wrapped by the `spinner` feature, which is on by default.
//! It can be disabled and the dependency on `indicatif` avoided by running
//! with `default-features = false`
use {
indicatif::{ProgressBar, ProgressStyle},
std::time::Duration,
};
pub fn new_progress_bar() -> ProgressBar {
let progress_bar = ProgressBar::new(42);
progress_bar.set_style(
ProgressStyle::default_spinner()
.template("{spinner:.green} {wide_msg}")
.expect("ProgressStyle::template direct input to be correct"),
);
progress_bar.enable_steady_tick(Duration::from_millis(100));
progress_bar
}
#[derive(Debug, Default)]
pub struct SendTransactionProgress {
pub confirmed_transactions: usize,
pub total_transactions: usize,
pub block_height: u64,
pub last_valid_block_height: u64,
}
impl SendTransactionProgress {
pub fn set_message_for_confirmed_transactions(&self, progress_bar: &ProgressBar, status: &str) {
progress_bar.set_message(format!(
"{:>5.1}% | {:<40} [block height {}; re-sign in {} blocks]",
self.confirmed_transactions as f64 * 100. / self.total_transactions as f64,
status,
self.block_height,
self.last_valid_block_height
.saturating_sub(self.block_height),
));
}
}