miHoYo_API/
error.rs

1use std::fmt;
2use std::fmt::Formatter;
3use once_cell::sync::Lazy;
4use thiserror::Error;
5
6
7#[allow(dead_code)]
8#[derive(Error, Debug)]
9pub(crate) enum Errors {
10    InvalidCookies(InvalidCookies),
11    InvalidLanguage(InvalidLanguage),
12    VisitsTooFrequently(VisitsTooFrequently),
13    MalformedRequest(MalformedRequest),
14    NoAccAssociatedCookies(NoAccAssociatedCookies),
15    TooManyRequests(TooManyRequests),
16    DataNotPublic(DataNotPublic),
17    InternalDatabaseError(InternalDatabaseError),
18    AccountNotFound(AccountNotFound),
19    RedemptionInvalid(RedemptionInvalid),
20    RedemptionCooldown(RedemptionCooldown),
21    RedemptionClaimed(RedemptionClaimed),
22    AlreadyClaimed(RedemptionClaimed),
23    AccountLoginFail(AccountLoginFail),
24    AccountHasLocked(AccountHasLocked),
25}
26
27
28impl fmt::Display for Errors {
29    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
30        match *self {
31            Errors::InvalidCookies(_) => write!(f, "Cookies are not valid."),
32            Errors::InvalidLanguage(_) => write!(f, "Language is not valid."),
33            Errors::VisitsTooFrequently(_) => write!(f, "Visits too frequently."),
34            Errors::MalformedRequest(_) => write!(f, "Malformed request."),
35            Errors::NoAccAssociatedCookies(_) => write!(f, "No game account associated with cookies"),
36            Errors::TooManyRequests(_) => write!(f, "Cannot get data for more than 30 accounts per cookie per day."),
37            Errors::DataNotPublic(_) => write!(f, "User's data is not public."),
38            Errors::InternalDatabaseError(_) => write!(f, "Internal database error."),
39            Errors::AccountNotFound(_) => write!(f, "Couldn't find the account."),
40            Errors::RedemptionInvalid(_) => write!(f, "Invalid redemption code."),
41            Errors::RedemptionCooldown(_) => write!(f, "Redemption is on cooldown."),
42            Errors::RedemptionClaimed(_) => write!(f, "Redemption code has been claimed already."),
43            Errors::AlreadyClaimed(_) => write!(f, "Already claimed the daily reward today."),
44            Errors::AccountLoginFail(_) => write!(f, "Account login failed."),
45            Errors::AccountHasLocked(_) => write!(f, "Account has been locked because exceeded password limit. Please wait 20mins and try again."),
46        }
47    }
48}
49
50
51trait BaseError {}
52
53#[derive(Debug)]
54pub struct InvalidCookies;
55impl BaseError for InvalidCookies {}
56
57#[derive(Debug)]
58pub struct InvalidLanguage;
59impl BaseError for InvalidLanguage {}
60
61#[derive(Debug)]
62pub struct VisitsTooFrequently;
63impl BaseError for VisitsTooFrequently {}
64
65#[derive(Debug)]
66pub struct MalformedRequest;
67impl BaseError for MalformedRequest {}
68
69#[derive(Debug)]
70pub struct NoAccAssociatedCookies;
71impl BaseError for NoAccAssociatedCookies {}
72
73#[derive(Debug)]
74pub struct TooManyRequests;
75impl BaseError for TooManyRequests {}
76
77#[derive(Debug)]
78pub struct DataNotPublic;
79impl BaseError for DataNotPublic {}
80
81#[derive(Debug)]
82pub struct InternalDatabaseError;
83impl BaseError for InternalDatabaseError {}
84
85#[derive(Debug)]
86pub struct AccountNotFound;
87impl BaseError for AccountNotFound {}
88
89#[derive(Debug)]
90pub struct RedemptionInvalid;
91impl BaseError for RedemptionInvalid {}
92
93#[derive(Debug)]
94pub struct RedemptionCooldown;
95impl BaseError for RedemptionCooldown {}
96
97#[derive(Debug)]
98pub struct RedemptionClaimed;
99impl BaseError for RedemptionClaimed {}
100
101#[derive(Debug)]
102pub struct AlreadyClaimed;
103impl BaseError for AlreadyClaimed {}
104
105#[derive(Debug)]
106pub struct AccountLoginFail;
107impl BaseError for AccountLoginFail {}
108
109#[derive(Debug)]
110pub struct AccountHasLocked;
111impl BaseError for AccountHasLocked {}
112
113
114static ERRORS: Lazy<Vec<(i16, Errors)>> = Lazy::new(|| {
115    vec![
116        (-100, Errors::InvalidCookies(InvalidCookies {})),
117        (-108, Errors::InvalidLanguage(InvalidLanguage {})),
118        (-110, Errors::VisitsTooFrequently(VisitsTooFrequently {})),
119
120        (10001, Errors::InvalidCookies(InvalidCookies {})),
121        (-10001, Errors::MalformedRequest(MalformedRequest {})),
122        (-10002, Errors::NoAccAssociatedCookies(NoAccAssociatedCookies {})),
123
124        (10101, Errors::TooManyRequests(TooManyRequests {})),
125        (10102, Errors::DataNotPublic(DataNotPublic {})),
126        // (10103, Errors::InvalidCookies()),
127        // (),
128        // (),
129        // (),
130        // (),
131        // (),
132        // (),
133        // (),
134        // (),
135        // (),
136        // (),
137        // (),
138        // (),
139        // (),
140        // (),
141        // (),
142        // (),
143        // (),
144        // (),
145        // (),
146        // (),
147        // (),
148        // (),
149        // (),
150    ]
151});
152
153
154// pub(crate) fn check_has_error(response: reqwest::Response) -> anyhow::Result<reqwest::Response> {
155//     let resp = &response;
156// }