osu_file_parser/osu_file/events/storyboard/
error.rs

1use strum_macros::{EnumString, IntoStaticStr};
2use thiserror::Error;
3
4use std::num::ParseIntError;
5
6use crate::helper::macros::verbose_error_to_error;
7
8#[derive(Debug, Error)]
9#[non_exhaustive]
10pub enum CommandPushError {
11    #[error("Invalid indentation, expected {0}, got {1}")]
12    InvalidIndentation(usize, usize),
13}
14
15#[derive(Debug, Error, IntoStaticStr, EnumString)]
16#[non_exhaustive]
17pub enum ParseObjectError {
18    #[error("Unknown object type")]
19    UnknownObjectType,
20    #[error("Missing layer field")]
21    MissingLayer,
22    #[error("Invalid layer value")]
23    InvalidLayer,
24    #[error("Missing origin field")]
25    MissingOrigin,
26    #[error("Invalid origin value")]
27    InvalidOrigin,
28    #[error("Missing file path field")]
29    MissingFilePath,
30    #[error("Missing position x field")]
31    MissingPositionX,
32    #[error("Invalid position x value")]
33    InvalidPositionX,
34    #[error("Missing position y field")]
35    MissingPositionY,
36    #[error("Invalid position y value")]
37    InvalidPositionY,
38    #[error("Missing frame count field")]
39    MissingFrameCount,
40    #[error("Invalid frame count value")]
41    InvalidFrameCount,
42    #[error("Missing frame delay field")]
43    MissingFrameDelay,
44    #[error("Invalid frame delay value")]
45    InvalidFrameDelay,
46    #[error("Missing loop type field")]
47    MissingLoopType,
48    #[error("Invalid loop type value")]
49    InvalidLoopType,
50}
51
52verbose_error_to_error!(ParseObjectError);
53
54#[derive(Debug, Error)]
55#[error("The filepath needs to be a path relative to where the .osu file is, not a full path such as `C:\\folder\\image.png`")]
56pub struct FilePathNotRelative;
57
58#[derive(Debug, Error)]
59#[non_exhaustive]
60pub enum ParseEasingError {
61    #[error(transparent)]
62    ParseValueError(#[from] ParseIntError),
63    #[error("Unknown easing type {0}")]
64    UnknownEasingType(usize),
65}
66
67#[derive(Debug, Error, EnumString, IntoStaticStr)]
68#[non_exhaustive]
69pub enum ParseCommandError {
70    /// Unknown command type
71    #[error("Unknown command type")]
72    UnknownCommandType,
73    /// Missing `start_time` field.
74    #[error("Missing `start_time` field")]
75    MissingStartTime,
76    /// Invalid `start_time` value.
77    #[error("Invalid `start_time` value")]
78    InvalidStartTime,
79    /// Missing `loop_count` field.
80    #[error("Missing `loop_count` field")]
81    MissingLoopCount,
82    /// Invalid `loop_count` value.
83    #[error("Invalid `loop_count` value")]
84    InvalidLoopCount,
85    /// Missing "trigger_type" field.
86    #[error("Missing `trigger_type` field")]
87    MissingTriggerType,
88    /// Invalid `trigger_type` value.
89    #[error("Invalid `trigger_type` value")]
90    InvalidTriggerType,
91    /// Invalid `group_number` value.
92    #[error("Invalid `group_number` value")]
93    InvalidGroupNumber,
94    /// Missing `end_time` field.
95    #[error("Missing `end_time` field")]
96    MissingEndTime,
97    /// Invalid `end_time` value.
98    #[error("Invalid `end_time` value")]
99    InvalidEndTime,
100    /// Missing `easing` field.
101    #[error("Missing `easing` field")]
102    MissingEasing,
103    /// Invalid `easing` value.
104    #[error("Invalid `easing` value")]
105    InvalidEasing,
106    /// Missing colour's `red` field.
107    #[error("Missing `red` field")]
108    MissingRed,
109    /// Missing colour's `green` field.
110    #[error("Missing `green` field")]
111    MissingGreen,
112    /// Missing colour's `blue` field.
113    #[error("Missing `blue` field")]
114    MissingBlue,
115    /// Invalid `red` value.
116    #[error("Invalid `red` value")]
117    InvalidRed,
118    /// Invalid `green` value.
119    #[error("Invalid `green` value")]
120    InvalidGreen,
121    /// Invalid `blue` value.
122    #[error("Invalid `blue` value")]
123    InvalidBlue,
124    /// Invalid continuing colour value.
125    #[error("Invalid continuing colour value")]
126    InvalidContinuingColours,
127    /// Missing parameter's `parameter_type` field.
128    #[error("Missing `parameter_type` field")]
129    MissingParameterType,
130    /// Invalid `parameter_type` value.
131    #[error("Invalid `parameter_type` value")]
132    InvalidParameterType,
133    /// Invalid continuing parameter value.
134    #[error("Invalid continuing parameter value")]
135    InvalidContinuingParameters,
136    /// Missing `move_x` field.
137    #[error("Missing `move_x` field")]
138    MissingMoveX,
139    /// Invalid `move_x` value.
140    #[error("Invalid `move_x` value")]
141    InvalidMoveX,
142    /// Missing `move_y` field.
143    #[error("Missing `move_y` field")]
144    MissingMoveY,
145    /// Invalid `move_y` value.
146    #[error("Invalid `move_y` value")]
147    InvalidMoveY,
148    /// Invalid continuing move value.
149    #[error("Invalid continuing move value")]
150    InvalidContinuingMove,
151    /// Missing `scale_x` field.
152    #[error("Missing `scale_x` field")]
153    MissingScaleX,
154    /// Invalid `scale_x` value.
155    #[error("Invalid `scale_x` value")]
156    InvalidScaleX,
157    /// Missing `scale_y` field.
158    #[error("Missing `scale_y` field")]
159    MissingScaleY,
160    /// Invalid `scale_y` value.
161    #[error("Invalid `scale_y` value")]
162    InvalidScaleY,
163    /// Invalid continuing scale value.
164    #[error("Invalid continuing scale value")]
165    InvalidContinuingScales,
166    /// Missing `start_opacity` field.
167    #[error("Missing `start_opacity` field")]
168    MissingStartOpacity,
169    /// Invalid `start_opacity` value.
170    #[error("Invalid `start_opacity` value")]
171    InvalidStartOpacity,
172    /// Invalid continuing opacity value.
173    #[error("Invalid continuing opacity value")]
174    InvalidContinuingOpacities,
175    /// Missing `start_scale` field.
176    #[error("Missing `start_scale` field")]
177    MissingStartScale,
178    /// Invalid `start_scale` value.
179    #[error("Invalid `start_scale` value")]
180    InvalidStartScale,
181    /// Invalid continuing scale value.
182    #[error("Invalid continuing scale value")]
183    InvalidContinuingScale,
184    /// Missing `start_rotation` field.
185    #[error("Missing `start_rotation` field")]
186    MissingStartRotation,
187    /// Invalid `start_rotation` value.
188    #[error("Invalid `start_rotation` value")]
189    InvalidStartRotation,
190    /// Invalid continuing rotation value.
191    #[error("Invalid continuing rotation value")]
192    InvalidContinuingRotation,
193}
194
195verbose_error_to_error!(ParseCommandError);
196
197#[derive(Debug, Error)]
198#[non_exhaustive]
199pub enum ParseTriggerTypeError {
200    #[error("There are too many `HitSound` fields")]
201    TooManyHitSoundFields,
202    #[error(transparent)]
203    ParseFieldError(#[from] ParseIntError),
204    #[error("Unknown trigger type")]
205    UnknownTriggerType,
206    #[error("Unknown `HitSound` type")]
207    UnknownHitSoundType,
208}
209
210#[derive(Debug, Error)]
211#[non_exhaustive]
212pub enum ContinuingRGBSetError {
213    #[error("continuing fields index out of bounds")]
214    IndexOutOfBounds,
215    #[error(transparent)]
216    InvalidFieldOption(#[from] InvalidColourFieldOption),
217}
218
219#[derive(Debug, Error)]
220#[non_exhaustive]
221pub enum InvalidColourFieldOption {
222    #[error("continuing fields green field is none without it being the last item in the continuing fields")]
223    Green,
224    #[error("continuing fields blue field is none without it being the last item in the continuing fields")]
225    Blue,
226}
227
228#[derive(Debug, Error)]
229#[non_exhaustive]
230pub enum ParseParameterError {
231    #[error("Unknown `Parameter` variant")]
232    UnknownVariant,
233}
234
235#[derive(Debug, Error)]
236#[non_exhaustive]
237pub enum ParseAdditionError {
238    #[error("Unknown `Addition` variant")]
239    UnknownVariant,
240}
241
242#[derive(Debug, Error)]
243#[non_exhaustive]
244pub enum ParseSampleSetError {
245    #[error("Unknown `SampleSet` variant")]
246    UnknownVariant,
247}
248
249#[derive(Debug, Error)]
250#[non_exhaustive]
251pub enum ParseOriginError {
252    #[error("Unknown `Origin` variant")]
253    UnknownVariant,
254    #[error(transparent)]
255    ParseIntError(#[from] ParseIntError),
256    #[error(transparent)]
257    OriginTryFromIntError(#[from] OriginTryFromIntError),
258}
259
260#[derive(Debug, Error)]
261#[non_exhaustive]
262pub enum OriginTryFromIntError {
263    #[error("Unknown `Origin` variant")]
264    UnknownVariant,
265}
266
267#[derive(Debug, Error)]
268#[non_exhaustive]
269pub enum ParseLoopTypeError {
270    #[error("Unknown `LoopType` variant")]
271    UnknownVariant,
272}
273
274#[derive(Debug, Error)]
275#[non_exhaustive]
276pub enum ParseLayerError {
277    #[error("Unknown `Layer` variant")]
278    UnknownVariant,
279}