1use bitflags::bitflags;
2
3bitflags! {
4 pub struct Edges: u8 {
5 const FLAG_EDGE_IN_A = 0b0000_0001;
6 const FLAG_EDGE_IN_C = 0b0000_0010;
7 const FLAG_EDGE_IN_G = 0b0000_0100;
8 const FLAG_EDGE_IN_T = 0b0000_1000;
9 const FLAG_EDGE_OUT_A = 0b0001_0000;
10 const FLAG_EDGE_OUT_C = 0b0010_0000;
11 const FLAG_EDGE_OUT_G = 0b0100_0000;
12 const FLAG_EDGE_OUT_T = 0b1000_0000;
13 }
14}
15
16impl Edges {
17 #[must_use]
18 pub fn from_string(s: &str) -> Self {
19 let mut edges = Edges::empty();
20
21 if s.chars().nth(0) == Some('a') {
22 edges.insert(Self::FLAG_EDGE_IN_A);
23 }
24 if s.chars().nth(1) == Some('c') {
25 edges.insert(Self::FLAG_EDGE_IN_C);
26 }
27 if s.chars().nth(2) == Some('g') {
28 edges.insert(Self::FLAG_EDGE_IN_G);
29 }
30 if s.chars().nth(3) == Some('t') {
31 edges.insert(Self::FLAG_EDGE_IN_T);
32 }
33
34 if s.chars().nth(4) == Some('A') {
35 edges.insert(Self::FLAG_EDGE_OUT_A);
36 }
37 if s.chars().nth(5) == Some('C') {
38 edges.insert(Self::FLAG_EDGE_OUT_C);
39 }
40 if s.chars().nth(6) == Some('G') {
41 edges.insert(Self::FLAG_EDGE_OUT_G);
42 }
43 if s.chars().nth(7) == Some('T') {
44 edges.insert(Self::FLAG_EDGE_OUT_T);
45 }
46
47 edges
48 }
49}