1use crate::codec::Codec;
6
7#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Codec)]
8#[bits(6)]
9#[repr(u8)]
10pub enum Amino {
11 #[alt(0b11_01_10, 0b01_01_10, 0b10_01_10)]
12 A = 0b00_01_10, #[alt(0b11_10_11)]
14 C = 0b01_10_11, #[alt(0b11_00_10)]
16 D = 0b01_00_10, #[alt(0b10_00_10)]
18 E = 0b00_00_10, #[alt(0b11_11_11)]
20 F = 0b01_11_11, #[alt(0b10_10_10, 0b01_10_10, 0b11_10_10)]
22 G = 0b00_10_10, #[alt(0b11_00_01)]
24 H = 0b01_00_01, #[alt(0b01_11_00, 0b11_11_00)]
26 I = 0b00_11_00, #[alt(0b10_00_00)]
28 K = 0b00_00_00, #[alt(0b00_11_11, 0b10_11_11, 0b11_11_01, 0b01_11_01, 0b10_11_01)]
30 L = 0b00_11_01, M = 0b10_11_00, #[alt(0b11_00_00)]
33 N = 0b01_00_00, #[alt(0b01_01_01, 0b10_01_01, 0b11_01_01)]
35 P = 0b00_01_01, #[alt(0b10_00_01)]
37 Q = 0b00_00_01, #[alt(0b10_10_00, 0b11_10_01, 0b01_10_01, 0b00_10_01, 0b10_10_01)]
39 R = 0b00_10_00, #[alt(0b11_01_11, 0b01_01_11, 0b00_01_11, 0b10_01_11, 0b11_10_00)]
41 S = 0b01_10_00, #[alt(0b11_01_00, 0b01_01_00, 0b10_01_00)]
43 T = 0b00_01_00, #[alt(0b01_11_10, 0b11_11_10, 0b10_11_10)]
45 V = 0b00_11_10, W = 0b10_10_11, #[alt(0b11_00_11)]
48 Y = 0b01_00_11, #[display('*')]
50 #[alt(0b00_10_11, 0b10_00_11)]
51 X = 0b00_00_11, }
53
54impl From<Amino> for u8 {
55 fn from(b: Amino) -> u8 {
56 b as u8
57 }
58}
59
60impl core::fmt::Display for Amino {
61 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
62 write!(f, "{}", self.to_char())
63 }
64}