use std::{num::TryFromIntError, string::FromUtf8Error};
#[derive(Debug, PartialEq, thiserror::Error)]
pub enum Error {
#[error("need data")]
NeedData,
#[error("parser error")]
Parser,
#[error("invalid id")]
InvalidId,
#[error("invalid varint")]
InvalidVarint,
#[error("forbidden unknown size")]
ForbiddenUnknownSize,
#[error("{0}")]
Utf8(#[from] FromUtf8Error),
#[error("forbidden integer size")]
ForbiddenIntegerSize,
#[error("forbidden float size")]
ForbiddenFloatSize,
#[error("valid element not found")]
ValidElementNotFound,
#[error("missing track number")]
MissingTrackNumber,
#[error("overflow")]
Overflow(#[from] TryFromIntError),
#[error("invalid date")]
InvalidDate,
}
impl From<nom::Err<()>> for Error {
fn from(value: nom::Err<()>) -> Self {
match value {
nom::Err::Incomplete(_) => Self::NeedData,
_ => Self::Parser,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parser() {
assert_eq!(Error::Parser, nom::Err::Error(()).into());
}
}