noodles_sam/alignment/record/cigar/op/
kind.rs1#[derive(Clone, Copy, Debug, Eq, PartialEq)]
5pub enum Kind {
6 Match,
8 Insertion,
10 Deletion,
12 Skip,
14 SoftClip,
16 HardClip,
18 Pad,
20 SequenceMatch,
22 SequenceMismatch,
24}
25
26impl Kind {
27 pub fn consumes_read(&self) -> bool {
38 matches!(
39 self,
40 Self::Match
41 | Self::Insertion
42 | Self::SoftClip
43 | Self::SequenceMatch
44 | Self::SequenceMismatch
45 )
46 }
47
48 pub fn consumes_reference(&self) -> bool {
59 matches!(
60 self,
61 Self::Match
62 | Self::Deletion
63 | Self::Skip
64 | Self::SequenceMatch
65 | Self::SequenceMismatch
66 )
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn test_consumes_read() {
76 assert!(Kind::Match.consumes_read());
77 assert!(Kind::Insertion.consumes_read());
78 assert!(!Kind::Deletion.consumes_read());
79 assert!(!Kind::Skip.consumes_read());
80 assert!(Kind::SoftClip.consumes_read());
81 assert!(!Kind::HardClip.consumes_read());
82 assert!(!Kind::Pad.consumes_read());
83 assert!(Kind::SequenceMatch.consumes_read());
84 assert!(Kind::SequenceMismatch.consumes_read());
85 }
86
87 #[test]
88 fn test_consumes_reference() {
89 assert!(Kind::Match.consumes_reference());
90 assert!(!Kind::Insertion.consumes_reference());
91 assert!(Kind::Deletion.consumes_reference());
92 assert!(Kind::Skip.consumes_reference());
93 assert!(!Kind::SoftClip.consumes_reference());
94 assert!(!Kind::HardClip.consumes_reference());
95 assert!(!Kind::Pad.consumes_reference());
96 assert!(Kind::SequenceMatch.consumes_reference());
97 assert!(Kind::SequenceMismatch.consumes_reference());
98 }
99}