diff options
| author | Denis Maximov <denismaximov98@gmail.com> | 2020-11-14 19:59:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-14 18:59:37 +0100 |
| commit | a2914066bf0e2e2bf5caee263d2378b7d77f477f (patch) | |
| tree | 2a87397c32e2d9f512ad0c886107aa5c2e57d68e /src/boundaries.rs | |
| parent | HOTFIX: do not get os input unless we're starting the app (diff) | |
| download | sl0ppij-a2914066bf0e2e2bf5caee263d2378b7d77f477f.tar.gz sl0ppij-a2914066bf0e2e2bf5caee263d2378b7d77f477f.tar.xz sl0ppij-a2914066bf0e2e2bf5caee263d2378b7d77f477f.zip | |
feat: add rustfmt, update action workflow to check for formatting (#45)
Diffstat (limited to 'src/boundaries.rs')
| -rw-r--r-- | src/boundaries.rs | 173 |
1 files changed, 130 insertions, 43 deletions
diff --git a/src/boundaries.rs b/src/boundaries.rs index 880c9061..436d767b 100644 --- a/src/boundaries.rs +++ b/src/boundaries.rs @@ -1,9 +1,13 @@ use std::collections::HashMap; -fn _debug_log_to_file (message: String) { +fn _debug_log_to_file(message: String) { use std::fs::OpenOptions; use std::io::prelude::*; - let mut file = OpenOptions::new().append(true).create(true).open("/tmp/mosaic-log.txt").unwrap(); + let mut file = OpenOptions::new() + .append(true) + .create(true) + .open("/tmp/mosaic-log.txt") + .unwrap(); file.write_all(message.as_bytes()).unwrap(); file.write_all("\n".as_bytes()).unwrap(); } @@ -28,81 +32,139 @@ fn combine_symbols(current_symbol: &str, next_symbol: &str) -> Option<&'static s match (current_symbol, next_symbol) { (boundary_type::TOP_RIGHT, boundary_type::TOP_RIGHT) => Some(boundary_type::TOP_RIGHT), // (┐, ┐) => Some(┐) (boundary_type::TOP_RIGHT, boundary_type::VERTICAL) => Some(boundary_type::VERTICAL_LEFT), // (┐, │) => Some(┤) - (boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL) => Some(boundary_type::HORIZONTAL_DOWN), // (┐, ─) => Some(┬) + (boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL) => { + Some(boundary_type::HORIZONTAL_DOWN) + } // (┐, ─) => Some(┬) (boundary_type::TOP_RIGHT, boundary_type::TOP_LEFT) => Some(boundary_type::HORIZONTAL_DOWN), // (┐, ┌) => Some(┬) - (boundary_type::TOP_RIGHT, boundary_type::BOTTOM_RIGHT) => Some(boundary_type::VERTICAL_LEFT), // (┐, ┘) => Some(┤) + (boundary_type::TOP_RIGHT, boundary_type::BOTTOM_RIGHT) => { + Some(boundary_type::VERTICAL_LEFT) + } // (┐, ┘) => Some(┤) (boundary_type::TOP_RIGHT, boundary_type::BOTTOM_LEFT) => Some(boundary_type::CROSS), // (┐, └) => Some(┼) - (boundary_type::TOP_RIGHT, boundary_type::VERTICAL_LEFT) => Some(boundary_type::VERTICAL_LEFT), // (┐, ┤) => Some(┤) + (boundary_type::TOP_RIGHT, boundary_type::VERTICAL_LEFT) => { + Some(boundary_type::VERTICAL_LEFT) + } // (┐, ┤) => Some(┤) (boundary_type::TOP_RIGHT, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::CROSS), // (┐, ├) => Some(┼) - (boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::HORIZONTAL_DOWN), // (┐, ┬) => Some(┬) + (boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL_DOWN) => { + Some(boundary_type::HORIZONTAL_DOWN) + } // (┐, ┬) => Some(┬) (boundary_type::TOP_RIGHT, boundary_type::HORIZONTAL_UP) => Some(boundary_type::CROSS), // (┐, ┴) => Some(┼) (boundary_type::TOP_RIGHT, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┐, ┼) => Some(┼) (boundary_type::HORIZONTAL, boundary_type::HORIZONTAL) => Some(boundary_type::HORIZONTAL), // (─, ─) => Some(─) (boundary_type::HORIZONTAL, boundary_type::VERTICAL) => Some(boundary_type::CROSS), // (─, │) => Some(┼) - (boundary_type::HORIZONTAL, boundary_type::TOP_LEFT) => Some(boundary_type::HORIZONTAL_DOWN), // (─, ┌) => Some(┬) - (boundary_type::HORIZONTAL, boundary_type::BOTTOM_RIGHT) => Some(boundary_type::HORIZONTAL_UP), // (─, ┘) => Some(┴) - (boundary_type::HORIZONTAL, boundary_type::BOTTOM_LEFT) => Some(boundary_type::HORIZONTAL_UP), // (─, └) => Some(┴) + (boundary_type::HORIZONTAL, boundary_type::TOP_LEFT) => { + Some(boundary_type::HORIZONTAL_DOWN) + } // (─, ┌) => Some(┬) + (boundary_type::HORIZONTAL, boundary_type::BOTTOM_RIGHT) => { + Some(boundary_type::HORIZONTAL_UP) + } // (─, ┘) => Some(┴) + (boundary_type::HORIZONTAL, boundary_type::BOTTOM_LEFT) => { + Some(boundary_type::HORIZONTAL_UP) + } // (─, └) => Some(┴) (boundary_type::HORIZONTAL, boundary_type::VERTICAL_LEFT) => Some(boundary_type::CROSS), // (─, ┤) => Some(┼) (boundary_type::HORIZONTAL, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::CROSS), // (─, ├) => Some(┼) - (boundary_type::HORIZONTAL, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::HORIZONTAL_DOWN), // (─, ┬) => Some(┬) - (boundary_type::HORIZONTAL, boundary_type::HORIZONTAL_UP) => Some(boundary_type::HORIZONTAL_UP), // (─, ┴) => Some(┴) + (boundary_type::HORIZONTAL, boundary_type::HORIZONTAL_DOWN) => { + Some(boundary_type::HORIZONTAL_DOWN) + } // (─, ┬) => Some(┬) + (boundary_type::HORIZONTAL, boundary_type::HORIZONTAL_UP) => { + Some(boundary_type::HORIZONTAL_UP) + } // (─, ┴) => Some(┴) (boundary_type::HORIZONTAL, boundary_type::CROSS) => Some(boundary_type::CROSS), // (─, ┼) => Some(┼) (boundary_type::VERTICAL, boundary_type::VERTICAL) => Some(boundary_type::VERTICAL), // (│, │) => Some(│) (boundary_type::VERTICAL, boundary_type::TOP_LEFT) => Some(boundary_type::VERTICAL_RIGHT), // (│, ┌) => Some(├) - (boundary_type::VERTICAL, boundary_type::BOTTOM_RIGHT) => Some(boundary_type::VERTICAL_LEFT), // (│, ┘) => Some(┤) - (boundary_type::VERTICAL, boundary_type::BOTTOM_LEFT) => Some(boundary_type::VERTICAL_RIGHT), // (│, └) => Some(├) - (boundary_type::VERTICAL, boundary_type::VERTICAL_LEFT) => Some(boundary_type::VERTICAL_LEFT), // (│, ┤) => Some(┤) - (boundary_type::VERTICAL, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::VERTICAL_RIGHT), // (│, ├) => Some(├) + (boundary_type::VERTICAL, boundary_type::BOTTOM_RIGHT) => { + Some(boundary_type::VERTICAL_LEFT) + } // (│, ┘) => Some(┤) + (boundary_type::VERTICAL, boundary_type::BOTTOM_LEFT) => { + Some(boundary_type::VERTICAL_RIGHT) + } // (│, └) => Some(├) + (boundary_type::VERTICAL, boundary_type::VERTICAL_LEFT) => { + Some(boundary_type::VERTICAL_LEFT) + } // (│, ┤) => Some(┤) + (boundary_type::VERTICAL, boundary_type::VERTICAL_RIGHT) => { + Some(boundary_type::VERTICAL_RIGHT) + } // (│, ├) => Some(├) (boundary_type::VERTICAL, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::CROSS), // (│, ┬) => Some(┼) (boundary_type::VERTICAL, boundary_type::HORIZONTAL_UP) => Some(boundary_type::CROSS), // (│, ┴) => Some(┼) (boundary_type::VERTICAL, boundary_type::CROSS) => Some(boundary_type::CROSS), // (│, ┼) => Some(┼) (boundary_type::TOP_LEFT, boundary_type::TOP_LEFT) => Some(boundary_type::TOP_LEFT), // (┌, ┌) => Some(┌) (boundary_type::TOP_LEFT, boundary_type::BOTTOM_RIGHT) => Some(boundary_type::CROSS), // (┌, ┘) => Some(┼) - (boundary_type::TOP_LEFT, boundary_type::BOTTOM_LEFT) => Some(boundary_type::VERTICAL_RIGHT), // (┌, └) => Some(├) + (boundary_type::TOP_LEFT, boundary_type::BOTTOM_LEFT) => { + Some(boundary_type::VERTICAL_RIGHT) + } // (┌, └) => Some(├) (boundary_type::TOP_LEFT, boundary_type::VERTICAL_LEFT) => Some(boundary_type::CROSS), // (┌, ┤) => Some(┼) - (boundary_type::TOP_LEFT, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::VERTICAL_RIGHT), // (┌, ├) => Some(├) - (boundary_type::TOP_LEFT, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::HORIZONTAL_DOWN), // (┌, ┬) => Some(┬) + (boundary_type::TOP_LEFT, boundary_type::VERTICAL_RIGHT) => { + Some(boundary_type::VERTICAL_RIGHT) + } // (┌, ├) => Some(├) + (boundary_type::TOP_LEFT, boundary_type::HORIZONTAL_DOWN) => { + Some(boundary_type::HORIZONTAL_DOWN) + } // (┌, ┬) => Some(┬) (boundary_type::TOP_LEFT, boundary_type::HORIZONTAL_UP) => Some(boundary_type::CROSS), // (┌, ┴) => Some(┼) (boundary_type::TOP_LEFT, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┌, ┼) => Some(┼) - (boundary_type::BOTTOM_RIGHT, boundary_type::BOTTOM_RIGHT) => Some(boundary_type::BOTTOM_RIGHT), // (┘, ┘) => Some(┘) - (boundary_type::BOTTOM_RIGHT, boundary_type::BOTTOM_LEFT) => Some(boundary_type::HORIZONTAL_UP), // (┘, └) => Some(┴) - (boundary_type::BOTTOM_RIGHT, boundary_type::VERTICAL_LEFT) => Some(boundary_type::VERTICAL_LEFT), // (┘, ┤) => Some(┤) + (boundary_type::BOTTOM_RIGHT, boundary_type::BOTTOM_RIGHT) => { + Some(boundary_type::BOTTOM_RIGHT) + } // (┘, ┘) => Some(┘) + (boundary_type::BOTTOM_RIGHT, boundary_type::BOTTOM_LEFT) => { + Some(boundary_type::HORIZONTAL_UP) + } // (┘, └) => Some(┴) + (boundary_type::BOTTOM_RIGHT, boundary_type::VERTICAL_LEFT) => { + Some(boundary_type::VERTICAL_LEFT) + } // (┘, ┤) => Some(┤) (boundary_type::BOTTOM_RIGHT, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::CROSS), // (┘, ├) => Some(┼) (boundary_type::BOTTOM_RIGHT, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::CROSS), // (┘, ┬) => Some(┼) - (boundary_type::BOTTOM_RIGHT, boundary_type::HORIZONTAL_UP) => Some(boundary_type::HORIZONTAL_UP), // (┘, ┴) => Some(┴) + (boundary_type::BOTTOM_RIGHT, boundary_type::HORIZONTAL_UP) => { + Some(boundary_type::HORIZONTAL_UP) + } // (┘, ┴) => Some(┴) (boundary_type::BOTTOM_RIGHT, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┘, ┼) => Some(┼) - (boundary_type::BOTTOM_LEFT, boundary_type::BOTTOM_LEFT) => Some(boundary_type::BOTTOM_LEFT), // (└, └) => Some(└) + (boundary_type::BOTTOM_LEFT, boundary_type::BOTTOM_LEFT) => { + Some(boundary_type::BOTTOM_LEFT) + } // (└, └) => Some(└) (boundary_type::BOTTOM_LEFT, boundary_type::VERTICAL_LEFT) => Some(boundary_type::CROSS), // (└, ┤) => Some(┼) - (boundary_type::BOTTOM_LEFT, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::VERTICAL_RIGHT), // (└, ├) => Some(├) + (boundary_type::BOTTOM_LEFT, boundary_type::VERTICAL_RIGHT) => { + Some(boundary_type::VERTICAL_RIGHT) + } // (└, ├) => Some(├) (boundary_type::BOTTOM_LEFT, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::CROSS), // (└, ┬) => Some(┼) - (boundary_type::BOTTOM_LEFT, boundary_type::HORIZONTAL_UP) => Some(boundary_type::HORIZONTAL_UP), // (└, ┴) => Some(┴) + (boundary_type::BOTTOM_LEFT, boundary_type::HORIZONTAL_UP) => { + Some(boundary_type::HORIZONTAL_UP) + } // (└, ┴) => Some(┴) (boundary_type::BOTTOM_LEFT, boundary_type::CROSS) => Some(boundary_type::CROSS), // (└, ┼) => Some(┼) - (boundary_type::VERTICAL_LEFT, boundary_type::VERTICAL_LEFT) => Some(boundary_type::VERTICAL_LEFT), // (┤, ┤) => Some(┤) + (boundary_type::VERTICAL_LEFT, boundary_type::VERTICAL_LEFT) => { + Some(boundary_type::VERTICAL_LEFT) + } // (┤, ┤) => Some(┤) (boundary_type::VERTICAL_LEFT, boundary_type::VERTICAL_RIGHT) => Some(boundary_type::CROSS), // (┤, ├) => Some(┼) - (boundary_type::VERTICAL_LEFT, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::CROSS), // (┤, ┬) => Some(┼) - (boundary_type::VERTICAL_LEFT, boundary_type::HORIZONTAL_UP) => Some(boundary_type::HORIZONTAL_UP), // (┤, ┴) => Some(┼) + (boundary_type::VERTICAL_LEFT, boundary_type::HORIZONTAL_DOWN) => { + Some(boundary_type::CROSS) + } // (┤, ┬) => Some(┼) + (boundary_type::VERTICAL_LEFT, boundary_type::HORIZONTAL_UP) => { + Some(boundary_type::HORIZONTAL_UP) + } // (┤, ┴) => Some(┼) (boundary_type::VERTICAL_LEFT, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┤, ┼) => Some(┼) (boundary_type::VERTICAL_RIGHT, boundary_type::VERTICAL_RIGHT) => { Some(boundary_type::VERTICAL_RIGHT) } // (├, ├) => Some(├) - (boundary_type::VERTICAL_RIGHT, boundary_type::HORIZONTAL_DOWN) => Some(boundary_type::CROSS), // (├, ┬) => Some(┼) + (boundary_type::VERTICAL_RIGHT, boundary_type::HORIZONTAL_DOWN) => { + Some(boundary_type::CROSS) + } // (├, ┬) => Some(┼) (boundary_type::VERTICAL_RIGHT, boundary_type::HORIZONTAL_UP) => Some(boundary_type::CROSS), // (├, ┴) => Some(┼) (boundary_type::VERTICAL_RIGHT, boundary_type::CROSS) => Some(boundary_type::CROSS), // (├, ┼) => Some(┼) (boundary_type::HORIZONTAL_DOWN, boundary_type::HORIZONTAL_DOWN) => { Some(boundary_type::HORIZONTAL_DOWN) } // (┬, ┬) => Some(┬) - (boundary_type::HORIZONTAL_DOWN, boundary_type::HORIZONTAL_UP) => Some(boundary_type::CROSS), // (┬, ┴) => Some(┼) + (boundary_type::HORIZONTAL_DOWN, boundary_type::HORIZONTAL_UP) => { + Some(boundary_type::CROSS) + } // (┬, ┴) => Some(┼) (boundary_type::HORIZONTAL_DOWN, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┬, ┼) => Some(┼) - (boundary_type::HORIZONTAL_UP, boundary_type::HORIZONTAL_UP) => Some(boundary_type::HORIZONTAL_UP), // (┴, ┴) => Some(┴) + (boundary_type::HORIZONTAL_UP, boundary_type::HORIZONTAL_UP) => { + Some(boundary_type::HORIZONTAL_UP) + } // (┴, ┴) => Some(┴) (boundary_type::HORIZONTAL_UP, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┴, ┼) => Some(┼) (boundary_type::CROSS, boundary_type::CROSS) => Some(boundary_type::CROSS), // (┼, ┼) => Some(┼) @@ -127,7 +189,7 @@ pub struct Coordinates { impl Coordinates { pub fn new(x: usize, y: usize) -> Self { - Coordinates {x, y} + Coordinates { x, y } } } @@ -136,10 +198,10 @@ pub trait Rect { fn y(&self) -> usize; fn rows(&self) -> usize; fn columns(&self) -> usize; - fn right_boundary_x_coords (&self) -> usize { + fn right_boundary_x_coords(&self) -> usize { self.x() + self.columns() } - fn bottom_boundary_y_coords (&self) -> usize { + fn bottom_boundary_y_coords(&self) -> usize { self.y() + self.rows() } } @@ -175,7 +237,9 @@ impl Boundaries { } else { boundary_type::VERTICAL }; - let next_symbol = self.boundary_characters.get(&coordinates) + let next_symbol = self + .boundary_characters + .get(&coordinates) .and_then(|current_symbol| find_next_symbol(current_symbol, symbol_to_add)) .unwrap_or(symbol_to_add); self.boundary_characters.insert(coordinates, next_symbol); @@ -194,42 +258,65 @@ impl Boundaries { } else { boundary_type::HORIZONTAL }; - let next_symbol = self.boundary_characters.get(&coordinates) + let next_symbol = self + .boundary_characters + .get(&coordinates) .and_then(|current_symbol| find_next_symbol(current_symbol, symbol_to_add)) .unwrap_or(symbol_to_add); self.boundary_characters.insert(coordinates, next_symbol); } } } - pub fn vte_output (&self) -> String { + pub fn vte_output(&self) -> String { let mut vte_output = String::new(); for (coordinates, boundary_character) in &self.boundary_characters { - vte_output.push_str(&format!("\u{1b}[{};{}H\u{1b}[m{}", coordinates.y + 1, coordinates.x + 1, boundary_character)); // goto row/col + boundary character + vte_output.push_str(&format!( + "\u{1b}[{};{}H\u{1b}[m{}", + coordinates.y + 1, + coordinates.x + 1, + boundary_character + )); // goto row/col + boundary character } vte_output } - fn rect_right_boundary_is_before_screen_edge <R: Rect>(&self, rect: &R) -> bool { + fn rect_right_boundary_is_before_screen_edge<R: Rect>(&self, rect: &R) -> bool { rect.x() + rect.columns() < self.columns } fn rect_bottom_boundary_is_before_screen_edge<R: Rect>(&self, rect: &R) -> bool { rect.y() + rect.rows() < self.rows } fn rect_right_boundary_row_start<R: Rect>(&self, rect: &R) -> usize { - if rect.y() == 0 { 0 } else { rect.y() - 1 } + if rect.y() == 0 { + 0 + } else { + rect.y() - 1 + } } fn rect_right_boundary_row_end<R: Rect>(&self, rect: &R) -> usize { let rect_bottom_row = rect.y() + rect.rows(); // we do this because unless we're on the screen edge, we'd like to go one extra row to // connect to whatever boundary is beneath us - if rect_bottom_row == self.rows { rect_bottom_row } else { rect_bottom_row + 1 } + if rect_bottom_row == self.rows { + rect_bottom_row + } else { + rect_bottom_row + 1 + } } fn rect_bottom_boundary_col_start<R: Rect>(&self, rect: &R) -> usize { - if rect.x() == 0 { 0 } else { rect.x() - 1 } + if rect.x() == 0 { + 0 + } else { + rect.x() - 1 + } } fn rect_bottom_boundary_col_end<R: Rect>(&self, rect: &R) -> usize { let rect_right_col = rect.x() + rect.columns(); // we do this because unless we're on the screen edge, we'd like to go one extra column to // connect to whatever boundary is right of us - if rect_right_col == self.columns { rect_right_col } else { rect_right_col + 1 } + if rect_right_col == self.columns { + rect_right_col + } else { + rect_right_col + 1 + } } } |
