gmo_coin_rs/
error.rs

1//! ライブラリ内で異常が発生したときに投げるエラーを定義する。
2
3use crate::response::ErrorResponse;
4use thiserror::Error;
5
6/// 異常が発生したときに投げるエラー。
7#[derive(Debug, Error)]
8pub enum Error {
9    #[error("reqwestがエラーを投げた")]
10    ReqwestError(reqwest::Error),
11
12    #[error("HTTPレスポンスのボディをserde_jsonで構造体にバインディングしてるとこで異常があった")]
13    SerdeJsonError(serde_json::Error),
14
15    #[error("URLを作るとこで異常が起きた")]
16    UrlParseError(url::ParseError),
17
18    #[error("空のレスポンスが返ってこないはずの箇所で空のレスポンスが返ってきた")]
19    EmptyResponseError(),
20
21    #[error("GMOコインのAPIからエラーレスポンスが返ってきた")]
22    APIError(ErrorResponse),
23
24    #[error("環境変数を読み取れなかった")]
25    EnvVarError(std::env::VarError),
26
27    #[error("IDを文字列から数値に変換できなかった")]
28    IdToNumberError(String),
29
30    #[error("指値/逆指値注文で価格が指定されていない")]
31    PriceNotSpecifiedError(),
32
33    #[error("デバッグ用")]
34    UnknownError,
35}
36
37impl From<reqwest::Error> for Error {
38    fn from(e: reqwest::Error) -> Self {
39        Error::ReqwestError(e)
40    }
41}
42
43impl From<serde_json::Error> for Error {
44    fn from(e: serde_json::Error) -> Self {
45        Error::SerdeJsonError(e)
46    }
47}
48
49impl From<url::ParseError> for Error {
50    fn from(e: url::ParseError) -> Self {
51        Error::UrlParseError(e)
52    }
53}
54
55impl From<std::env::VarError> for Error {
56    fn from(e: std::env::VarError) -> Self {
57        Error::EnvVarError(e)
58    }
59}