three_style_lib/sticker/
mod.rs

1mod constants;
2
3use crate::{
4    error::Error,
5    facelet::{Facelet, FaceletTarget},
6};
7use constants::{CORNER_FACELET_MAP, EDGE_FACELET_MAP};
8use std::{fmt, str::FromStr};
9
10#[rustfmt::skip]
11#[derive(Debug, PartialEq, Clone, Copy)]
12pub enum Corner {
13    UBL, BLU, LUB,
14    URB, RBU, BUR,
15    UFR, FRU, RUF,
16    ULF, LFU, FUL,
17    DFL, FLD, LDF,
18    DRF, RFD, FDR,
19    DBR, BRD, RDB,
20    DLB, LBD, BDL,
21}
22
23impl FaceletTarget for Corner {
24    fn to_facelets(&self) -> Vec<Facelet> {
25        CORNER_FACELET_MAP[*self as usize].to_vec()
26    }
27}
28
29impl FromStr for Corner {
30    type Err = Error;
31
32    fn from_str(s: &str) -> Result<Self, Self::Err> {
33        match s {
34            "UBL" => Ok(Self::UBL),
35            "BLU" => Ok(Self::BLU),
36            "LUB" => Ok(Self::LUB),
37            "URB" => Ok(Self::URB),
38            "RBU" => Ok(Self::RBU),
39            "BUR" => Ok(Self::BUR),
40            "UFR" => Ok(Self::UFR),
41            "FRU" => Ok(Self::FRU),
42            "RUF" => Ok(Self::RUF),
43            "ULF" => Ok(Self::ULF),
44            "LFU" => Ok(Self::LFU),
45            "FUL" => Ok(Self::FUL),
46            "DFL" => Ok(Self::DFL),
47            "FLD" => Ok(Self::FLD),
48            "LDF" => Ok(Self::LDF),
49            "DRF" => Ok(Self::DRF),
50            "RFD" => Ok(Self::RFD),
51            "FDR" => Ok(Self::FDR),
52            "DBR" => Ok(Self::DBR),
53            "BRD" => Ok(Self::BRD),
54            "RDB" => Ok(Self::RDB),
55            "DLB" => Ok(Self::DLB),
56            "LBD" => Ok(Self::LBD),
57            "BDL" => Ok(Self::BDL),
58            _ => Err(Error::InvalidCornerString(s.to_owned())),
59        }
60    }
61}
62
63impl fmt::Display for Corner {
64    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
65        write!(f, "{:?}", self)
66    }
67}
68
69#[rustfmt::skip]
70#[derive(Debug, PartialEq, Clone, Copy)]
71pub enum Edge {
72    UB, BU,
73    UR, RU,
74    UF, FU,
75    UL, LU,
76    FL, LF,
77    FR, RF,
78    BR, RB,
79    BL, LB,
80    DF, FD,
81    DR, RD,
82    DB, BD,
83    DL, LD,
84}
85
86impl FaceletTarget for Edge {
87    fn to_facelets(&self) -> Vec<Facelet> {
88        EDGE_FACELET_MAP[*self as usize].to_vec()
89    }
90}
91
92impl FromStr for Edge {
93    type Err = Error;
94
95    fn from_str(s: &str) -> Result<Self, Self::Err> {
96        match s {
97            "UB" => Ok(Self::UB),
98            "BU" => Ok(Self::BU),
99            "UR" => Ok(Self::UR),
100            "RU" => Ok(Self::RU),
101            "UF" => Ok(Self::UF),
102            "FU" => Ok(Self::FU),
103            "UL" => Ok(Self::UL),
104            "LU" => Ok(Self::LU),
105            "FL" => Ok(Self::FL),
106            "LF" => Ok(Self::LF),
107            "FR" => Ok(Self::FR),
108            "RF" => Ok(Self::RF),
109            "BR" => Ok(Self::BR),
110            "RB" => Ok(Self::RB),
111            "BL" => Ok(Self::BL),
112            "LB" => Ok(Self::LB),
113            "DF" => Ok(Self::DF),
114            "FD" => Ok(Self::FD),
115            "DR" => Ok(Self::DR),
116            "RD" => Ok(Self::RD),
117            "DB" => Ok(Self::DB),
118            "BD" => Ok(Self::BD),
119            "DL" => Ok(Self::DL),
120            "LD" => Ok(Self::LD),
121            _ => Err(Error::InvalidEdgeString(s.to_owned())),
122        }
123    }
124}
125
126impl fmt::Display for Edge {
127    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
128        write!(f, "{:?}", self)
129    }
130}