1use self::Facelet as F;
2use std::fmt;
3
4#[rustfmt::skip]
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6pub enum Facelet {
7 U0, U1, U2, U3, U4, U5, U6, U7, U8,
8 R0, R1, R2, R3, R4, R5, R6, R7, R8,
9 F0, F1, F2, F3, F4, F5, F6, F7, F8,
10 D0, D1, D2, D3, D4, D5, D6, D7, D8,
11 L0, L1, L2, L3, L4, L5, L6, L7, L8,
12 B0, B1, B2, B3, B4, B5, B6, B7, B8,
13}
14
15impl Facelet {
16 pub fn as_color(&self) -> Color {
17 match self {
18 F::U0 | F::U1 | F::U2 | F::U3 | F::U4 | F::U5 | F::U6 | F::U7 | F::U8 => Color::U,
19 F::R0 | F::R1 | F::R2 | F::R3 | F::R4 | F::R5 | F::R6 | F::R7 | F::R8 => Color::R,
20 F::F0 | F::F1 | F::F2 | F::F3 | F::F4 | F::F5 | F::F6 | F::F7 | F::F8 => Color::F,
21 F::D0 | F::D1 | F::D2 | F::D3 | F::D4 | F::D5 | F::D6 | F::D7 | F::D8 => Color::D,
22 F::L0 | F::L1 | F::L2 | F::L3 | F::L4 | F::L5 | F::L6 | F::L7 | F::L8 => Color::L,
23 F::B0 | F::B1 | F::B2 | F::B3 | F::B4 | F::B5 | F::B6 | F::B7 | F::B8 => Color::B,
24 }
25 }
26}
27
28impl fmt::Display for Facelet {
29 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30 write!(f, "{:?}", self)
31 }
32}
33
34pub trait FaceletTarget {
35 fn to_facelets(&self) -> Vec<Facelet>;
36
37 fn as_facelet(&self) -> Facelet {
38 self.to_facelets()[0]
39 }
40}
41
42pub type FaceletState = [Facelet; 54];
43
44#[rustfmt::skip]
45pub const DEFAULT_STATE: FaceletState = [
46 F::U0, F::U1, F::U2, F::U3, F::U4, F::U5, F::U6, F::U7, F::U8,
47 F::R0, F::R1, F::R2, F::R3, F::R4, F::R5, F::R6, F::R7, F::R8,
48 F::F0, F::F1, F::F2, F::F3, F::F4, F::F5, F::F6, F::F7, F::F8,
49 F::D0, F::D1, F::D2, F::D3, F::D4, F::D5, F::D6, F::D7, F::D8,
50 F::L0, F::L1, F::L2, F::L3, F::L4, F::L5, F::L6, F::L7, F::L8,
51 F::B0, F::B1, F::B2, F::B3, F::B4, F::B5, F::B6, F::B7, F::B8,
52];
53
54#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
55pub enum Color {
56 U,
57 R,
58 F,
59 D,
60 L,
61 B,
62}
63
64impl fmt::Display for Color {
65 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
66 write!(f, "{:?}", self)
67 }
68}