From cef06eb172826d239fdc868d9646740ddabd6f09 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 2 Feb 2021 02:37:13 +0000 Subject: [PATCH] CLI: Improve readability of `solana stake-history` (bp #14963) (#14966) * cli-output: Minor refactor of `build_balance_message()` (cherry picked from commit 1c6f31241a03ddf7161c3ef6a2018cecc9e1283b) * cli: Improve `stake-history` output readability (cherry picked from commit c8d83ae0191e423a9eefad6753c1840dc12e2bf2) Co-authored-by: Trent Nelson --- cli-output/src/cli_output.rs | 16 ++++++--- cli-output/src/display.rs | 67 +++++++++++++++++++++++++++++------- 2 files changed, 66 insertions(+), 17 deletions(-) diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index cc2e05ea8a..d5e7759079 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -1,5 +1,8 @@ use crate::{ - display::{build_balance_message, format_labeled_address, writeln_name_value}, + display::{ + build_balance_message, build_balance_message_with_config, format_labeled_address, + writeln_name_value, BuildBalanceMessageConfig, + }, QuietDisplay, VerboseDisplay, }; use chrono::{DateTime, NaiveDateTime, SecondsFormat, Utc}; @@ -866,14 +869,19 @@ impl fmt::Display for CliStakeHistory { )) .bold() )?; + let config = BuildBalanceMessageConfig { + use_lamports_unit: self.use_lamports_unit, + show_unit: false, + trim_trailing_zeros: false, + }; for entry in &self.entries { writeln!( f, " {:>5} {:>20} {:>20} {:>20} {}", entry.epoch, - build_balance_message(entry.effective_stake, self.use_lamports_unit, false), - build_balance_message(entry.activating_stake, self.use_lamports_unit, false), - build_balance_message(entry.deactivating_stake, self.use_lamports_unit, false), + build_balance_message_with_config(entry.effective_stake, &config), + build_balance_message_with_config(entry.activating_stake, &config), + build_balance_message_with_config(entry.deactivating_stake, &config), if self.use_lamports_unit { "lamports" } else { diff --git a/cli-output/src/display.rs b/cli-output/src/display.rs index 273502db99..bb33f1afb7 100644 --- a/cli-output/src/display.rs +++ b/cli-output/src/display.rs @@ -7,22 +7,63 @@ use solana_sdk::{ use solana_transaction_status::UiTransactionStatusMeta; use std::{collections::HashMap, fmt, io}; -pub fn build_balance_message(lamports: u64, use_lamports_unit: bool, show_unit: bool) -> String { - if use_lamports_unit { - let ess = if lamports == 1 { "" } else { "s" }; - let unit = if show_unit { - format!(" lamport{}", ess) - } else { - "".to_string() - }; - format!("{:?}{}", lamports, unit) +#[derive(Clone, Debug)] +pub struct BuildBalanceMessageConfig { + pub use_lamports_unit: bool, + pub show_unit: bool, + pub trim_trailing_zeros: bool, +} + +impl Default for BuildBalanceMessageConfig { + fn default() -> Self { + Self { + use_lamports_unit: false, + show_unit: true, + trim_trailing_zeros: true, + } + } +} + +pub fn build_balance_message_with_config( + lamports: u64, + config: &BuildBalanceMessageConfig, +) -> String { + let value = if config.use_lamports_unit { + lamports.to_string() } else { let sol = lamports_to_sol(lamports); let sol_str = format!("{:.9}", sol); - let pretty_sol = sol_str.trim_end_matches('0').trim_end_matches('.'); - let unit = if show_unit { " SOL" } else { "" }; - format!("{}{}", pretty_sol, unit) - } + if config.trim_trailing_zeros { + sol_str + .trim_end_matches('0') + .trim_end_matches('.') + .to_string() + } else { + sol_str + } + }; + let unit = if config.show_unit { + if config.use_lamports_unit { + let ess = if lamports == 1 { "" } else { "s" }; + format!(" lamport{}", ess) + } else { + " SOL".to_string() + } + } else { + "".to_string() + }; + format!("{}{}", value, unit) +} + +pub fn build_balance_message(lamports: u64, use_lamports_unit: bool, show_unit: bool) -> String { + build_balance_message_with_config( + lamports, + &BuildBalanceMessageConfig { + use_lamports_unit, + show_unit, + ..BuildBalanceMessageConfig::default() + }, + ) } // Pretty print a "name value"