lib_tsalign 1.0.1

A sequence-to-sequence aligner that accounts for template switches
Documentation
use std::{fmt::Debug, hash::Hash};

use compact_genome::interface::{alphabet::Alphabet, sequence::GenomeSequence};

#[derive(Debug, Default, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SequencePair {
    pub reference_name: String,
    pub reference: String,
    pub reference_rc: String,
    pub query_name: String,
    pub query: String,
    pub query_rc: String,
}

impl SequencePair {
    pub fn new<
        AlphabetType: Alphabet,
        SubsequenceType: GenomeSequence<AlphabetType, SubsequenceType> + ?Sized,
    >(
        reference: &SubsequenceType,
        query: &SubsequenceType,
        reference_name: &str,
        query_name: &str,
    ) -> Self {
        Self {
            reference_name: reference_name.to_owned(),
            reference: reference.as_string(),
            reference_rc: reference
                .reverse_complement_iter()
                .map(Into::<char>::into)
                .collect(),
            query_name: query_name.to_owned(),
            query: query.as_string(),
            query_rc: query
                .reverse_complement_iter()
                .map(Into::<char>::into)
                .collect(),
        }
    }
}