osu_file_parser/osu_file/events/storyboard/
error.rs1use 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 #[error("Unknown command type")]
72 UnknownCommandType,
73 #[error("Missing `start_time` field")]
75 MissingStartTime,
76 #[error("Invalid `start_time` value")]
78 InvalidStartTime,
79 #[error("Missing `loop_count` field")]
81 MissingLoopCount,
82 #[error("Invalid `loop_count` value")]
84 InvalidLoopCount,
85 #[error("Missing `trigger_type` field")]
87 MissingTriggerType,
88 #[error("Invalid `trigger_type` value")]
90 InvalidTriggerType,
91 #[error("Invalid `group_number` value")]
93 InvalidGroupNumber,
94 #[error("Missing `end_time` field")]
96 MissingEndTime,
97 #[error("Invalid `end_time` value")]
99 InvalidEndTime,
100 #[error("Missing `easing` field")]
102 MissingEasing,
103 #[error("Invalid `easing` value")]
105 InvalidEasing,
106 #[error("Missing `red` field")]
108 MissingRed,
109 #[error("Missing `green` field")]
111 MissingGreen,
112 #[error("Missing `blue` field")]
114 MissingBlue,
115 #[error("Invalid `red` value")]
117 InvalidRed,
118 #[error("Invalid `green` value")]
120 InvalidGreen,
121 #[error("Invalid `blue` value")]
123 InvalidBlue,
124 #[error("Invalid continuing colour value")]
126 InvalidContinuingColours,
127 #[error("Missing `parameter_type` field")]
129 MissingParameterType,
130 #[error("Invalid `parameter_type` value")]
132 InvalidParameterType,
133 #[error("Invalid continuing parameter value")]
135 InvalidContinuingParameters,
136 #[error("Missing `move_x` field")]
138 MissingMoveX,
139 #[error("Invalid `move_x` value")]
141 InvalidMoveX,
142 #[error("Missing `move_y` field")]
144 MissingMoveY,
145 #[error("Invalid `move_y` value")]
147 InvalidMoveY,
148 #[error("Invalid continuing move value")]
150 InvalidContinuingMove,
151 #[error("Missing `scale_x` field")]
153 MissingScaleX,
154 #[error("Invalid `scale_x` value")]
156 InvalidScaleX,
157 #[error("Missing `scale_y` field")]
159 MissingScaleY,
160 #[error("Invalid `scale_y` value")]
162 InvalidScaleY,
163 #[error("Invalid continuing scale value")]
165 InvalidContinuingScales,
166 #[error("Missing `start_opacity` field")]
168 MissingStartOpacity,
169 #[error("Invalid `start_opacity` value")]
171 InvalidStartOpacity,
172 #[error("Invalid continuing opacity value")]
174 InvalidContinuingOpacities,
175 #[error("Missing `start_scale` field")]
177 MissingStartScale,
178 #[error("Invalid `start_scale` value")]
180 InvalidStartScale,
181 #[error("Invalid continuing scale value")]
183 InvalidContinuingScale,
184 #[error("Missing `start_rotation` field")]
186 MissingStartRotation,
187 #[error("Invalid `start_rotation` value")]
189 InvalidStartRotation,
190 #[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}