aboutsummaryrefslogtreecommitdiff
path: root/srchr/src/output.rs
diff options
context:
space:
mode:
authortslil clingman <tslil@posteo.de>2022-09-29 22:55:01 +0200
committertslil clingman <tslil@posteo.de>2022-09-29 22:55:01 +0200
commitab985ecb4cb6bcc8a65ff79aa746a1f80fa4b2f4 (patch)
tree876352f82e51723ac1cbadeda272c3adbef00ae5 /srchr/src/output.rs
parent785fa20b4e4a5372857f6f033b9d478685460cea (diff)
Refactor code
Diffstat (limited to 'srchr/src/output.rs')
-rw-r--r--srchr/src/output.rs51
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;
+}