pub const GRID_SRC: &'static str = "// #region Grid\npub struct Grid<T>\nwhere\n T: Clone,\n{\n width: usize,\n height: usize,\n values: Vec<Vec<T>>,\n}\n\npub struct GridItem<T>\nwhere\n T: Clone,\n{\n pub val: T,\n pub x: usize,\n pub y: usize,\n}\n\nimpl<T> Grid<T>\nwhere\n T: Default,\n T: Clone,\n{\n pub fn new(width: usize, height: usize) -> Self {\n Grid {\n width,\n height,\n values: vec![vec![T::default(); width]; height],\n }\n }\n}\n\nimpl<T> Grid<T>\nwhere\n T: Clone,\n{\n pub fn from(grid: Vec<Vec<T>>) -> Self {\n Grid {\n width: grid[0].len(),\n height: grid.len(),\n values: grid,\n }\n }\n pub fn get_near_4(&self, pos: (usize, usize)) -> Vec<GridItem<T>> {\n let mut result = Vec::new();\n\n if pos.0 > 0 {\n result.push(GridItem {\n x: pos.0 - 1,\n y: pos.1,\n val: self.values[pos.1][pos.0 - 1].clone(),\n });\n }\n if pos.0 < self.width - 1 {\n result.push(GridItem {\n x: pos.0 + 1,\n y: pos.1,\n val: self.values[pos.1][pos.0 + 1].clone(),\n });\n }\n if pos.1 > 0 {\n result.push(GridItem {\n x: pos.0,\n y: pos.1 - 1,\n val: self.values[pos.1 - 1][pos.0].clone(),\n });\n }\n if pos.1 < self.height - 1 {\n result.push(GridItem {\n x: pos.0,\n y: pos.1 + 1,\n val: self.values[pos.1 + 1][pos.0].clone(),\n });\n }\n\n result\n }\n pub fn is_near_4(&self, pos1: (usize, usize), pos2: (usize, usize)) -> bool {\n let x = (pos1.0 as i32 - pos2.0 as i32).abs();\n let y = (pos1.1 as i32 - pos2.1 as i32).abs();\n x == 1 && y == 0 || x == 0 && y == 1\n }\n}\n\n// #endregion\n";