Skip to main content

biolib/
error.rs

1pub type Result<T> = std::result::Result<T, BioLibError>;
2
3#[derive(Debug)]
4pub enum BioLibError {
5    Http { status: u16, message: String },
6    Request(String),
7    Json(serde_json::Error),
8    Io(std::io::Error),
9    BinaryFormat(String),
10    AuthRequired(String),
11    NotFound(String),
12    PermissionDenied(String),
13    Validation(String),
14    CloudJobError(String),
15    CloudJobFinished,
16    WaitTimeout(String),
17    General(String),
18}
19
20impl std::fmt::Display for BioLibError {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        match self {
23            Self::Http { status, message } => write!(f, "HTTP error {status}: {message}"),
24            Self::Request(err) => write!(f, "Request failed: {err}"),
25            Self::Json(err) => write!(f, "JSON error: {err}"),
26            Self::Io(err) => write!(f, "IO error: {err}"),
27            Self::BinaryFormat(msg) => write!(f, "Binary format error: {msg}"),
28            Self::AuthRequired(msg) => write!(f, "Authentication required: {msg}"),
29            Self::NotFound(msg) => write!(f, "Not found: {msg}"),
30            Self::PermissionDenied(msg) => write!(f, "Permission denied: {msg}"),
31            Self::Validation(msg) => write!(f, "Validation error: {msg}"),
32            Self::CloudJobError(msg) => write!(f, "Cloud job error: {msg}"),
33            Self::CloudJobFinished => write!(f, "Cloud job already finished"),
34            Self::WaitTimeout(msg) => write!(f, "{msg}"),
35            Self::General(msg) => write!(f, "{msg}"),
36        }
37    }
38}
39
40impl std::error::Error for BioLibError {}
41
42impl From<serde_json::Error> for BioLibError {
43    fn from(err: serde_json::Error) -> Self {
44        Self::Json(err)
45    }
46}
47
48impl From<std::io::Error> for BioLibError {
49    fn from(err: std::io::Error) -> Self {
50        Self::Io(err)
51    }
52}