cyclone_mod/
err.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4use thiserror::Error;
5
6#[derive(Debug, Error, Serialize, Deserialize)]
7pub struct InvalidAPIKeyError {
8    pub message: String,
9}
10
11impl Display for InvalidAPIKeyError {
12    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13        write!(f, "{}", self.message)
14    }
15}
16
17#[derive(Debug, Error, Serialize, Deserialize)]
18pub struct ModNotFoundError {
19    pub message: String,
20}
21
22impl Display for ModNotFoundError {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        write!(f, "{}", self.message)
25    }
26}
27
28#[derive(Debug, Error, Serialize, Deserialize)]
29pub struct UntrackedOrInvalidMod {
30    pub message: String,
31}
32
33impl Display for UntrackedOrInvalidMod {
34    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        write!(f, "{}", self.message)
36    }
37}
38
39#[derive(Debug, Error, Serialize, Deserialize)]
40pub struct InvalidGame {
41    pub code: u64,
42    pub message: String,
43}
44
45impl Display for InvalidGame {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        write!(f, "{}", self.message)
48    }
49}
50
51pub mod validate {
52    use thiserror::Error;
53
54    use crate::err::InvalidAPIKeyError;
55
56    #[derive(Debug, Error)]
57    pub enum ValidateError {
58        #[error(transparent)]
59        Reqwest(#[from] reqwest::Error),
60        #[error(transparent)]
61        SerdeJson(#[from] serde_json::Error),
62        #[error(transparent)]
63        InvalidAPIKey(#[from] InvalidAPIKeyError),
64    }
65}
66
67pub mod post {
68    use thiserror::Error;
69
70    use crate::{
71        err::{InvalidAPIKeyError, ModNotFoundError},
72        request::ModId,
73    };
74
75    #[derive(Debug, Clone, Copy, PartialEq, Eq)]
76    pub enum PostModStatus {
77        /// User successfully tracked a mod.
78        SuccessfullyTracked(ModId),
79        /// User is already tracking a mod.
80        AlreadyTracking(ModId),
81    }
82
83    #[derive(Debug, Error)]
84    pub enum TrackModError {
85        #[error(transparent)]
86        Reqwest(#[from] reqwest::Error),
87        #[error(transparent)]
88        SerdeJson(#[from] serde_json::Error),
89        #[error(transparent)]
90        InvalidAPIKey(#[from] InvalidAPIKeyError),
91        #[error(transparent)]
92        ModNotFound(#[from] ModNotFoundError),
93    }
94}
95
96pub mod get {
97    use thiserror::Error;
98
99    use crate::err::{InvalidAPIKeyError, InvalidGame};
100
101    #[derive(Debug, Error)]
102    pub enum GameModError {
103        #[error(transparent)]
104        Reqwest(#[from] reqwest::Error),
105        #[error(transparent)]
106        SerdeJson(#[from] serde_json::Error),
107        #[error(transparent)]
108        InvalidAPIKey(#[from] InvalidAPIKeyError),
109        #[error(transparent)]
110        InvalidGameID(#[from] InvalidGame),
111    }
112}
113
114pub mod delete {
115    use thiserror::Error;
116
117    use crate::err::{InvalidAPIKeyError, UntrackedOrInvalidMod};
118
119    #[derive(Debug, Error)]
120    pub enum DeleteModError {
121        #[error(transparent)]
122        Reqwest(#[from] reqwest::Error),
123        #[error(transparent)]
124        SerdeJson(#[from] serde_json::Error),
125        #[error(transparent)]
126        InvalidAPIKey(#[from] InvalidAPIKeyError),
127        #[error(transparent)]
128        UntrackedOrInvalid(#[from] UntrackedOrInvalidMod),
129    }
130}