diff --git a/pulse-sdk/src/terminal.rs b/pulse-sdk/src/terminal.rs index a93ca3a..c82562b 100644 --- a/pulse-sdk/src/terminal.rs +++ b/pulse-sdk/src/terminal.rs @@ -47,15 +47,18 @@ pub struct MarketItem { #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum InspectTarget { None, - Some(Vec), + Some(Vec), } +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct InspectRow(pub InspectItem, pub InspectItem, pub InspectItem); + #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum InspectItem { - String(String), + Name(String), Symbol(String), - USD(f64), - F64(f64), + USD(Decimal), + F64(Decimal), } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] diff --git a/src/terminal/formatting.rs b/src/terminal/formatting.rs index 826864e..64744a6 100644 --- a/src/terminal/formatting.rs +++ b/src/terminal/formatting.rs @@ -10,15 +10,24 @@ impl Formatted for InspectTarget { match self { Self::None => vec!["\x1b[2mnothing to inspect\x1b[0m".to_string()], - Self::Some(items) => items - .iter() - .map(|item| match item { - InspectItem::F64(v) => format_f64(*v), - InspectItem::USD(v) => format!("${}", format_f64(*v)), - InspectItem::Symbol(v) => format!("\x1b[35m{v}\x1b[0m"), - InspectItem::String(v) => v.clone(), - }) - .collect(), + Self::Some(items) => { + let items = items + .iter() + .map(|row| { + ( + format_inspect_item(&row.0), + format_inspect_item(&row.1), + format_inspect_item(&row.2), + ) + }) + .collect::>(); + + items + .iter() + .map(|(a, b, c)| Triple(a, b, c)) + .collect::>() + .get_formatted() + } } } } @@ -226,6 +235,15 @@ pub fn apply_padding(mut items: Vec) -> Vec { items } +pub fn format_inspect_item(item: &InspectItem) -> String { + match item { + InspectItem::F64(v) => format_f64(v.as_f64()), + InspectItem::USD(v) => format!("${}", format_f64(v.as_f64())), + InspectItem::Symbol(v) => format!("\x1b[35m{v}\x1b[0m"), + InspectItem::Name(v) => v.clone(), + } +} + pub fn format_symbol(value: &str) -> String { format!("\x1b[35m{value}\x1b[0m") }