1use std::error::Error;
2use std::fmt;
3
4#[derive(Debug)]
6pub enum MinaCalcError {
7 CalculatorCreationFailed,
9 NoNotesProvided,
11 InvalidMusicRate(f32),
13 InvalidScoreGoal(f32),
15 CalculationFailed(String),
17 InvalidNoteData(String),
19 MemoryAllocationFailed,
21 InternalError(String),
23 OsuError(OsuError),
25}
26
27#[derive(Debug)]
29pub enum OsuError {
30 UnsupportedColumn(f32),
32 UnsupportedHitObjectKind(String),
34 HitObjectConversion(String),
36 ValidationFailed(String),
38 ParseFailed(String),
40 UnsupportedGameMode(String),
42 UnsupportedKeyCount(f32),
44}
45
46impl fmt::Display for MinaCalcError {
47 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48 match self {
49 MinaCalcError::CalculatorCreationFailed => write!(f, "Failed to create calculator"),
50 MinaCalcError::NoNotesProvided => write!(f, "No notes provided for calculation"),
51 MinaCalcError::InvalidMusicRate(rate) => write!(f, "Invalid music rate: {} (must be positive)", rate),
52 MinaCalcError::InvalidScoreGoal(goal) => write!(f, "Invalid score goal: {} (must be between 0 and 100)", goal),
53 MinaCalcError::CalculationFailed(msg) => write!(f, "Calculation failed: {}", msg),
54 MinaCalcError::InvalidNoteData(msg) => write!(f, "Invalid note data: {}", msg),
55 MinaCalcError::MemoryAllocationFailed => write!(f, "Memory allocation failed"),
56 MinaCalcError::InternalError(msg) => write!(f, "Internal error: {}", msg),
57 MinaCalcError::OsuError(osu_err) => write!(f, "Osu! error: {}", osu_err),
58 }
59 }
60}
61
62impl fmt::Display for OsuError {
63 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
64 match self {
65 OsuError::UnsupportedColumn(x) => write!(f, "Unsupported column position: {}", x),
66 OsuError::UnsupportedHitObjectKind(kind) => write!(f, "Unsupported hit object kind: {}", kind),
67 OsuError::HitObjectConversion(msg) => write!(f, "Hit object conversion failed: {}", msg),
68 OsuError::ValidationFailed(msg) => write!(f, "Beatmap validation failed: {}", msg),
69 OsuError::ParseFailed(msg) => write!(f, "Failed to parse beatmap: {}", msg),
70 OsuError::UnsupportedGameMode(mode) => write!(f, "Unsupported game mode: {}", mode),
71 OsuError::UnsupportedKeyCount(count) => write!(f, "Unsupported key count: {}", count),
72 }
73 }
74}
75
76impl Error for MinaCalcError {}
77impl Error for OsuError {}
78
79impl From<OsuError> for MinaCalcError {
81 fn from(osu_err: OsuError) -> Self {
82 MinaCalcError::OsuError(osu_err)
83 }
84}
85
86pub type MinaCalcResult<T> = Result<T, MinaCalcError>;
88pub type OsuResult<T> = Result<T, OsuError>;