pub mod bam;
pub mod casava;
pub mod fast5;
pub mod fastq;
pub mod group;
pub use bam::open_sequence_file;
pub use group::SequenceFileGroup;
use crate::utils::phred::PhredEncoding;
#[derive(Debug, Clone)]
pub struct Sequence {
pub id: String,
pub sequence: Vec<u8>,
pub quality: Vec<u8>,
pub is_filtered: bool,
pub colorspace: Option<Vec<u8>>,
}
impl Sequence {
pub fn new(id: String, mut sequence: Vec<u8>, quality: Vec<u8>) -> Self {
sequence.make_ascii_uppercase();
Self {
id,
sequence,
quality,
is_filtered: false,
colorspace: None,
}
}
pub fn len(&self) -> usize {
self.sequence.len()
}
pub fn is_empty(&self) -> bool {
self.sequence.is_empty()
}
pub fn heap_bytes(&self) -> usize {
self.id.len()
+ self.sequence.len()
+ self.quality.len()
+ self.colorspace.as_ref().map_or(0, Vec::len)
}
}
pub trait SequenceFile: Send {
fn next(&mut self) -> Option<std::io::Result<Sequence>>;
fn name(&self) -> &str;
fn is_colorspace(&self) -> bool;
fn known_phred_encoding(&self) -> Option<PhredEncoding> {
None
}
fn percent_complete(&self) -> f64;
fn background_threads(&self) -> usize {
0
}
}