sigalign_core/reference/extensions/
label.rs

1use super::{
2    Reference,
3    PatternIndex,
4    SequenceStorage,
5};
6
7impl<I, S> Reference<I, S> where
8    I: PatternIndex ,
9    S: SequenceStorage + LabelStorage,
10{
11    pub fn label_of_target(&self, target_index: u32) -> Option<String> {
12        if target_index < self.num_targets() {
13            Some(self.label_of_target_unchecked(target_index))
14        } else {
15            None
16        }
17    }
18    pub fn label_of_target_unchecked(&self, target_index: u32) -> String {
19        self.sequence_storage.label_of_target_unchecked(target_index)
20    }
21}
22
23impl<I, S> Reference<I, S> where
24    I: PatternIndex ,
25    S: SequenceStorage + LabelRefStorage,
26{
27    pub fn label_ref_of_target(&self, target_index: u32) -> Option<&str> {
28        if target_index < self.num_targets() {
29            Some(self.label_ref_of_target_unchecked(target_index))
30        } else {
31            None
32        }
33    }
34    pub fn label_ref_of_target_unchecked(&self, target_index: u32) -> &str {
35        self.sequence_storage.label_ref_of_target_unchecked(target_index)
36    }
37}
38
39/// Storage for label of sequences.
40pub trait LabelStorage {
41    fn label_of_target_unchecked(&self, target_index: u32) -> String;
42}
43/// Storage for label of sequences as a string slice.
44pub trait LabelRefStorage {
45    fn label_ref_of_target_unchecked(&self, target_index: u32) -> &str;
46}