use thiserror;
#[derive(std::fmt::Debug, thiserror::Error)]
pub enum Error {
#[error("Weight array is larger than value array")]
WeightArrayLargerValueArray,
#[error("Unreachable error from file {file} in line {line}")]
Unreachable {
line: u32,
file: &'static str,
},
#[error(transparent)]
StdIo(#[from] std::io::Error),
#[error(transparent)]
RandWeightedError(#[from] rand::distributions::weighted::WeightedError),
#[cfg(feature = "fasta")]
#[error(transparent)]
FastaBuilderError(#[from] crate::format::fasta::FastaBuilderError),
#[cfg(feature = "fastq")]
#[error(transparent)]
FastqBuilderError(#[from] crate::format::fastq::FastqBuilderError),
#[cfg(feature = "vcf")]
#[error(transparent)]
VcfBuilderError(#[from] crate::format::vcf::VcfBuilderError),
#[cfg(feature = "vcf")]
#[error(transparent)]
VcfRecordBuilderError(#[from] crate::format::vcf::record::RecordBuilderError),
#[cfg(feature = "vcf")]
#[error(transparent)]
VcfHeaderBuilderError(#[from] crate::format::vcf::header::HeaderBuilderError),
#[cfg(feature = "sequence")]
#[error(transparent)]
SequenceBuilderError(#[from] crate::format::sequence::SequenceBuilderError),
#[cfg(feature = "quality")]
#[error(transparent)]
QualityBuilderError(#[from] crate::format::quality::QualityBuilderError),
}
macro_rules! create_unreachable {
() => {
crate::error::Error::Unreachable {
line: std::line!(),
file: std::file!(),
}
};
}
pub(crate) use create_unreachable;
pub type Result<T> = core::result::Result<T, Error>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unreachable_macro() {
assert_matches::assert_matches!(
create_unreachable!(),
crate::error::Error::Unreachable {
line: 88,
#[cfg(target_family = "windows")]
file: "src\\error.rs",
#[cfg(target_family = "unix")]
file: "src/error.rs",
#[cfg(target_family = "wasm")]
file: "src/error.rs",
}
);
}
}