diff options
| author | tslil clingman <tslil@posteo.de> | 2022-09-29 22:55:01 +0200 |
|---|---|---|
| committer | tslil clingman <tslil@posteo.de> | 2022-09-29 22:55:01 +0200 |
| commit | ab985ecb4cb6bcc8a65ff79aa746a1f80fa4b2f4 (patch) | |
| tree | 876352f82e51723ac1cbadeda272c3adbef00ae5 /srchr/src/output.rs | |
| parent | 785fa20b4e4a5372857f6f033b9d478685460cea (diff) | |
Refactor code
Diffstat (limited to 'srchr/src/output.rs')
| -rw-r--r-- | srchr/src/output.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/srchr/src/output.rs b/srchr/src/output.rs new file mode 100644 index 0000000..b5af9e7 --- /dev/null +++ b/srchr/src/output.rs @@ -0,0 +1,51 @@ +use crate::config::*; + +// This is a silly amount of work to genericise the below... +pub trait ToMyString { + const BLANK_STRING: &'static str; + fn to_my_string(&self) -> String; +} + +impl ToMyString for char { + const BLANK_STRING: &'static str = " "; + fn to_my_string(&self) -> String { + self.to_string() + } +} + +impl ToMyString for u32 { + const BLANK_STRING: &'static str = " "; + fn to_my_string(&self) -> String { + format!("{:5}", *self) + } +} + +impl ToMyString for f32 { + const BLANK_STRING: &'static str = " "; + fn to_my_string(&self) -> String { + format!("{:>4.1}", *self) + } +} + +pub fn format_block_output<T: Iterator<Item = S>, S: ToMyString>(things: T) -> String { + let mut result = String::new(); + for (i, t) in things.enumerate() { + result += &t.to_my_string(); + if i < NUM_KEYS - 1 { + result.push(' '); + } + if (i + 1) % 10 == 0 { + result.push('\n'); + if NUM_KEYS < 30 && i == 19 { + result += S::BLANK_STRING; + result.push(' ') + } + } else if (i < 20 && (i + 1) % 5 == 0) || (i == (NUM_KEYS - 20) / 2 + 19) { + result.push(' '); + } + if i + 1 >= NUM_KEYS { + break; + } + } + return result; +} |
