use std::num::ParseIntError;
use strum_macros::{EnumString, IntoStaticStr};
use thiserror::Error;
use crate::helper::macros::verbose_error_to_error;
#[derive(Debug, Error)]
#[error(transparent)]
pub struct ParseError(#[from] ParseTimingPointError);
#[derive(Debug, Error, EnumString, IntoStaticStr)]
#[non_exhaustive]
pub enum ParseTimingPointError {
#[error("Invalid `time` value")]
InvalidTime,
#[error("Missing `beat_length` field")]
MissingBeatLength,
#[error("Missing `meter` field")]
MissingMeter,
#[error("Invalid `meter` value")]
InvalidMeter,
#[error("Missing `sample_set` field")]
MissingSampleSet,
#[error("Invalid `sample_set` value")]
InvalidSampleSet,
#[error("Missing `sample_index` field")]
MissingSampleIndex,
#[error("Invalid `sample_index` value")]
InvalidSampleIndex,
#[error("Missing `volume` field")]
MissingVolume,
#[error("Invalid `volume` value")]
InvalidVolume,
#[error("Missing `effects` field")]
MissingEffects,
#[error("Invalid `effects` value")]
InvalidEffects,
#[error("Missing `uninherited` field")]
MissingUninherited,
#[error("Invalid `uninherited` value")]
InvalidUninherited,
}
verbose_error_to_error!(ParseTimingPointError);
#[derive(Debug, Error, PartialEq, Eq)]
#[non_exhaustive]
pub enum ParseSampleSetError {
#[error(transparent)]
ParseIntError(#[from] ParseIntError),
}
#[derive(Debug, Error)]
#[error(transparent)]
pub struct ParseEffectsError(#[from] ParseIntError);
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum ParseSampleIndexError {
#[error(transparent)]
ParseIntError(#[from] ParseIntError),
}
#[derive(Debug, Error, PartialEq, Eq)]
#[non_exhaustive]
pub enum VolumeError {
#[error(transparent)]
ParseVolumeError(#[from] ParseIntError),
}