use crate::data::{
ByteValidator,
mappings::ByteMap,
types::{amino_acids::AminoAcids, nucleotides::Nucleotides},
};
pub trait RetainSequence {
fn retain_by_validation(&mut self, validation_mapping: &ByteValidator);
fn retain_by_recoding(&mut self, transformation_mapping: &ByteMap);
}
impl RetainSequence for Vec<u8> {
#[inline]
fn retain_by_validation(&mut self, validation_mapping: &ByteValidator) {
self.retain(|b| validation_mapping[*b]);
}
#[inline]
fn retain_by_recoding(&mut self, transformation_mapping: &ByteMap) {
self.retain_mut(|b| {
*b = transformation_mapping[*b];
*b > 0
});
}
}
pub trait StdForSequences: AsMut<Vec<u8>> {
#[inline]
fn retain<F>(&mut self, f: F)
where
F: FnMut(&u8) -> bool, {
self.as_mut().retain(f);
}
}
impl StdForSequences for Nucleotides {}
impl StdForSequences for AminoAcids {}