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 SuccessfullyTracked(ModId),
79 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}