Skip to main content

fire_scope/
error.rs

1use std::{io, net::AddrParseError, num::ParseIntError, string::FromUtf8Error};
2use thiserror::Error;
3use tokio::sync::AcquireError;
4use tokio::task::JoinError;
5
6#[derive(Error, Debug)]
7pub enum AppError {
8    // IOまわりのエラー
9    #[error("I/O error: {0}")]
10    Io(#[from] io::Error),
11
12    // ネットワーク関係のエラー (reqwest 等)
13    #[error("Network error: {0}")]
14    Network(#[from] reqwest::Error),
15
16    // UTF-8パースなどの文字列変換エラー
17    #[error("String conversion error: {0}")]
18    Utf8(#[from] FromUtf8Error),
19
20    // 汎用的なパースエラー
21    #[error("Parse error: {0}")]
22    ParseError(String),
23
24    // 特定の入力が不正だった場合など
25    #[error("Invalid input: {0}")]
26    InvalidInput(String),
27
28    // その他、文字列メッセージだけを格納した汎用エラー
29    #[error("{0}")]
30    Other(String),
31
32    // acquire_owned().await? のエラー
33    #[error("Semaphore acquire error: {0}")]
34    SemaphoreError(#[from] AcquireError),
35
36    // tokio::spawn(…).await? のエラー
37    #[error("Task join error: {0}")]
38    JoinError(#[from] JoinError),
39
40    // IPv4Addr, Ipv6Addr などのパース失敗
41    #[error("Address parse error: {0}")]
42    AddrParseError(#[from] AddrParseError),
43
44    // 文字列 → 数値パース失敗
45    #[error("Integer parse error: {0}")]
46    ParseIntError(#[from] ParseIntError),
47}