use std::fmt::Debug;
use std::sync::Arc;

use bstr::ByteSlice;
use serde::{Deserialize, Serialize};

pub mod aligner;
pub mod alignment;
pub mod cluster_settings;
pub mod contig;
pub mod coords;
pub mod csv;
pub mod list_of_regions;
pub mod reference;
pub mod stats;

pub type MutableSequence = Vec<u8>;
pub type ImmutableSequence = Arc<[u8]>;

#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SequencePair {
    pub reference: ImmutableSequence,
    pub query: ImmutableSequence,
}

impl Debug for SequencePair {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("SequencePair")
            .field("reference", &self.reference.as_bstr())
            .field("query", &self.query.as_bstr())
            .finish()
    }
}
