1pub type ShiftResult<T> = Result<T, ShiftError>;
3
4pub type RewardsPageError = crate::types::rewards::rewards_page::FromHtmlError;
5pub type InvalidHomePageError = crate::types::home_page::FromHtmlError;
6pub type RewardFormError = crate::types::rewards::reward_form::FromHtmlError;
7pub type InvalidCodeRedemptionPageError =
8 crate::types::rewards::code_redemption_page::FromHtmlError;
9pub type InvalidAccountPage = crate::types::account_page::FromHtmlError;
10
11#[derive(Debug, thiserror::Error)]
13pub enum ShiftError {
14 #[error(transparent)]
16 Reqwest(#[from] reqwest::Error),
17
18 #[error("incorrect email or password")]
20 IncorrectEmailOrPassword,
21
22 #[error("invalid http redirect '{0}'")]
24 InvalidRedirect(String),
25
26 #[error(transparent)]
28 Json(#[from] serde_json::Error),
29
30 #[error("invalid rewards page")]
32 InvalidRewardsPage(#[from] RewardsPageError),
33 #[error("invalid home page")]
35 InvalidHomePage(#[from] InvalidHomePageError),
36 #[error("invalid reward form")]
38 InvalidRewardForm(#[from] RewardFormError),
39 #[error("invalid code redemption page")]
41 InvalidCodeRedemptionPage(#[from] InvalidCodeRedemptionPageError),
42 #[error("invalid account page")]
44 InvalidAccountPage(#[from] InvalidAccountPage),
45
46 #[error("missing alert notice")]
48 MissingAlertNotice,
49
50 #[error("non-existent shift code")]
52 NonExistentShiftCode,
53 #[error("expired shift code")]
55 ExpiredShiftCode,
56 #[error("unavailable shift code")]
58 UnavailableShiftCode,
59
60 #[error("shift code already redeemed")]
62 ShiftCodeAlreadyRedeemed,
63 #[error("launch a shift game to redeem the code")]
65 LaunchShiftGame,
66 #[error("failed to redeem shift code")]
68 ShiftCodeRedeemFail,
69
70 #[error("tokio task join error")]
72 TokioJoin(#[from] tokio::task::JoinError),
73}