noodles-sam 0.85.0

Sequence Alignment/Map (SAM) format reader and writer
Documentation
pub mod tag;
pub mod value;

use std::{error, fmt};

pub use self::{tag::parse_tag, value::parse_value};

#[derive(Clone, Debug, Eq, PartialEq)]
pub enum ParseError {
    MissingDelimiter,
    InvalidDelimiter,
    MissingSeparator,
    InvalidSeparator,
}

impl error::Error for ParseError {}

impl fmt::Display for ParseError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Self::MissingDelimiter => write!(f, "missing delimiter"),
            Self::InvalidDelimiter => write!(f, "invalid delimiter"),
            Self::MissingSeparator => write!(f, "missing separator"),
            Self::InvalidSeparator => write!(f, "invalid separator"),
        }
    }
}

pub(super) fn consume_delimiter(src: &mut &[u8]) -> Result<(), ParseError> {
    const DELIMITER: u8 = b'\t';

    match src.split_off_first() {
        Some(&DELIMITER) => Ok(()),
        Some(_) => Err(ParseError::InvalidDelimiter),
        None => Err(ParseError::MissingDelimiter),
    }
}

pub(super) fn consume_separator(src: &mut &[u8]) -> Result<(), ParseError> {
    const SEPARATOR: u8 = b':';

    match src.split_off_first() {
        Some(&SEPARATOR) => Ok(()),
        Some(_) => Err(ParseError::InvalidSeparator),
        None => Err(ParseError::MissingSeparator),
    }
}