pub enum IbuError {
Io(Error),
Niffler(Error),
InvalidMagicNumber {
expected: u32,
actual: u32,
},
TruncatedRecord {
pos: usize,
},
InvalidVersion {
expected: u32,
actual: u32,
},
InvalidBarcodeLength(u32),
InvalidUmiLength(u32),
InvalidMapSize,
InvalidIndex {
idx: usize,
max: usize,
},
Process(Box<dyn StdError + Send + Sync>),
}Expand description
Error types for IBU operations.
This enum covers all possible error conditions that can occur when reading, writing, or processing IBU files. Each variant provides specific context about what went wrong to help with debugging and error handling.
§Examples
use ibu::{IbuError, Reader};
use std::io::Cursor;
// Handle specific error types
let invalid_data = vec![0u8; 32];
let cursor = Cursor::new(invalid_data);
match Reader::new(cursor) {
Err(IbuError::InvalidMagicNumber { expected, actual }) => {
println!("Wrong file type: expected {:#x}, got {:#x}", expected, actual);
},
Err(IbuError::Io(io_err)) => {
println!("I/O error: {}", io_err);
},
Err(e) => {
println!("Other error: {}", e);
},
Ok(_) => unreachable!(),
}Variants§
Io(Error)
I/O error from the underlying reader or writer.
This wraps standard I/O errors that can occur when reading from or writing to files, network streams, or other I/O sources.
Niffler(Error)
Compression/decompression error from niffler.
This occurs when there are problems with compressed file formats
like gzip or zstd when the niffler feature is enabled.
InvalidMagicNumber
Invalid magic number in file header.
The file doesn’t start with the expected IBU magic number (0x21554249). This usually indicates the file is not an IBU file or is corrupted.
TruncatedRecord
Incomplete record data at the specified file position.
This occurs when the file ends in the middle of a record, indicating the file was truncated or corrupted during writing.
InvalidVersion
Unsupported file format version.
The file was created with a different version of the IBU format that is not supported by this library version.
InvalidBarcodeLength(u32)
Barcode length is outside the valid range (1-32).
Barcode lengths must be between 1 and 32 bases due to the 2-bit encoding scheme used in the format.
InvalidUmiLength(u32)
UMI length is outside the valid range (1-32).
UMI lengths must be between 1 and 32 bases due to the 2-bit encoding scheme used in the format.
InvalidMapSize
File data size is not a multiple of the record size.
This indicates the file is corrupted or was not written properly, as all IBU files should contain complete 24-byte records after the header.
InvalidIndex
Array index is out of bounds.
This occurs when trying to access records beyond the end of the file or with invalid slice bounds in memory-mapped operations.
Process(Box<dyn StdError + Send + Sync>)
Error occurred during parallel processing.
This wraps errors that occur in user-defined parallel processors, allowing custom error types to be propagated through the parallel processing system.
Trait Implementations§
Source§impl Error for IbuError
impl Error for IbuError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Auto Trait Implementations§
impl Freeze for IbuError
impl !RefUnwindSafe for IbuError
impl Send for IbuError
impl Sync for IbuError
impl Unpin for IbuError
impl !UnwindSafe for IbuError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<E> IntoIbuError for E
impl<E> IntoIbuError for E
Source§fn into_ibu_error(self) -> IbuError
fn into_ibu_error(self) -> IbuError
IbuError.