1use std::str::FromStr;
2
3#[derive(Clone)]
4pub enum InputCells {
5 Custom(Vec<(i8, i8)>),
6 Neighbors,
7 NoCorners,
8 CornersOnly,
9 FarOnly,
10 FarAlso,
11 FarCornersOnly,
12}
13impl FromStr for InputCells {
14 type Err = ();
15 fn from_str(s: &str) -> Result<InputCells, ()> {
16 match s {
17 "Neighbors" => Ok(InputCells::Neighbors),
18 "NoCorners" => Ok(InputCells::NoCorners),
19 "CornersOnly" => Ok(InputCells::CornersOnly),
20 "FarOnly" => Ok(InputCells::FarOnly),
21 "FarAlso" => Ok(InputCells::FarAlso),
22 "FarCornersOnly" => Ok(InputCells::FarCornersOnly),
23 _ => Err(()),
24 }
25 }
26}
27impl InputCells {
28 pub fn get_data(&self) -> Vec<(i8, i8)> {
29 match *self {
30 InputCells::Neighbors => {
31 vec![
32 (-1,-1), (0,-1), (1,-1),
33 (-1, 0), (1, 0),
34 (-1, 1), (0, 1), (1, 1)
35 ]
36 },
37 InputCells::NoCorners => {
38 vec![
39 (0,-1),
40 (-1, 0), (1, 0),
41 (0, 1)
42 ]
43 },
44 InputCells::CornersOnly => {
45 vec![
46 (-1,-1), (1,-1),
47
48 (-1, 1), (1, 1)
49 ]
50 },
51 InputCells::FarOnly => {
52 vec![
53 (-2,-2), (-1,-2), (0,-2), (1,-2), (2,-2),
54 (-2,-1), (2,-1),
55 (-2, 0), (2, 0),
56 (-2, 1), (2, 1),
57 (-2, 2), (-1, 2), (0, 2), (1, 2), (2, 2)
58 ]
59 },
60 InputCells::FarAlso => {
61 vec![
62 (-2,-2), (-1,-2), (0,-2), (1,-2), (2,-2),
63 (-2,-1), (-1,-1), (0,-1), (1,-1), (2,-1),
64 (-2, 0), (-1, 0), (1, 0), (2, 0),
65 (-2, 1), (-1, 1), (0, 1), (1, 1), (2, 1),
66 (-2, 2), (-1, 2), (0, 2), (1, 2), (2, 2)
67 ]
68 },
69 InputCells::FarCornersOnly => {
70 vec![
71 (-2,-2), (-1,-2), (1,-2), (2,-2),
72 (-2,-1), (2,-1),
73
74 (-2, 1), (2, 1),
75 (-2, 2), (-1, 2), (1, 2), (2, 2)
76 ]
77 }
78 InputCells::Custom(ref coords) => coords.clone(),
79 }
80 }
81}