use crate::prelude::*;
mod reader;
mod std_traits;
#[cfg(test)]
mod test;
mod view_traits;
pub use reader::*;
#[derive(Clone, Eq, PartialEq, Hash, Debug, Default)]
pub struct FastQ {
pub header: String,
pub sequence: Nucleotides,
pub quality: QualityScores,
}
#[derive(Clone, Eq, PartialEq, Hash, Debug, Default)]
pub struct FastQView<'a> {
pub header: &'a str,
pub sequence: NucleotidesView<'a>,
pub quality: QualityScoresView<'a>,
}
#[derive(Eq, PartialEq, Hash, Debug)]
pub struct FastQViewMut<'a> {
pub header: &'a mut String,
pub sequence: NucleotidesViewMut<'a>,
pub quality: QualityScoresViewMut<'a>,
}
impl FastQ {
#[inline]
#[must_use]
pub fn new() -> Self {
FastQ {
header: String::new(),
sequence: Nucleotides::new(),
quality: QualityScores::new(),
}
}
#[inline]
#[must_use]
pub fn to_reverse_complement(&self) -> FastQ {
FastQ {
header: self.header.clone(),
sequence: self.sequence.to_reverse_complement(),
quality: self.quality.to_reverse(),
}
}
#[inline]
pub fn make_reverse_complement(&mut self) {
self.sequence.make_reverse_complement();
self.quality.make_reverse();
}
#[inline]
pub fn clear(&mut self) {
self.sequence.clear();
self.quality.clear();
}
}
impl FastQView<'_> {
#[inline]
#[must_use]
pub fn new() -> Self {
FastQView {
header: "",
sequence: NucleotidesView::new(),
quality: QualityScoresView::new(),
}
}
#[inline]
#[must_use]
pub fn to_reverse_complement(&self) -> FastQ {
FastQ {
header: self.header.to_string(),
sequence: self.sequence.to_reverse_complement(),
quality: self.quality.to_reverse(),
}
}
}
impl FastQViewMut<'_> {
#[inline]
#[must_use]
pub fn to_reverse_complement(&self) -> FastQ {
FastQ {
header: (*self.header).clone(),
sequence: self.sequence.to_reverse_complement(),
quality: self.quality.to_reverse(),
}
}
#[inline]
pub fn make_reverse_complement(&mut self) {
self.sequence.make_reverse_complement();
self.quality.make_reverse();
}
}