aboutsummaryrefslogtreecommitdiffstats
path: root/src/boundaries.rs
diff options
context:
space:
mode:
authorDenis Maximov <denismaximov98@gmail.com>2020-11-14 19:59:37 +0200
committerGitHub <noreply@github.com>2020-11-14 18:59:37 +0100
commita2914066bf0e2e2bf5caee263d2378b7d77f477f (patch)
tree2a87397c32e2d9f512ad0c886107aa5c2e57d68e /src/boundaries.rs
parentHOTFIX: do not get os input unless we're starting the app (diff)
downloadsl0ppij-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.rs173
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
+ }
}
}