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}