skydive/
edges.rs

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}