noodles_vcf/variant/record/
reference_bases.rs

1use std::{io, str};
2
3/// Variant record reference bases.
4pub trait ReferenceBases {
5    /// Returns whether there are any reference bases.
6    fn is_empty(&self) -> bool;
7
8    /// Returns the number of reference bases.
9    fn len(&self) -> usize;
10
11    /// Returns an iterator over reference bases.
12    fn iter(&self) -> Box<dyn Iterator<Item = io::Result<u8>> + '_>;
13}
14
15impl ReferenceBases for &str {
16    fn is_empty(&self) -> bool {
17        str::is_empty(self)
18    }
19
20    fn len(&self) -> usize {
21        str::len(self)
22    }
23
24    fn iter(&self) -> Box<dyn Iterator<Item = io::Result<u8>> + '_> {
25        Box::new(self.as_bytes().iter().copied().map(Ok))
26    }
27}
28
29impl ReferenceBases for Box<dyn ReferenceBases + '_> {
30    fn is_empty(&self) -> bool {
31        (**self).is_empty()
32    }
33
34    fn len(&self) -> usize {
35        (**self).len()
36    }
37
38    fn iter(&self) -> Box<dyn Iterator<Item = io::Result<u8>> + '_> {
39        (**self).iter()
40    }
41}