summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-04-06 11:11:56 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-04-06 11:11:56 +0200
commit6e868585fefa132812e0d25f2e8d5e107d77c103 (patch)
tree3f3552f109ce6b594a64ef7411562547ecbd6aa5
parentf27ff3c73f91e3c5821ed54bbc9b7e6f641dbf53 (diff)
Convert from failure to thiserror
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--librepology/Cargo.toml2
-rw-r--r--librepology/src/lib.rs2
-rw-r--r--librepology/src/v1/api.rs3
-rw-r--r--librepology/src/v1/error.rs22
-rw-r--r--librepology/src/v1/mod.rs1
-rw-r--r--librepology/src/v1/restapi.rs14
-rw-r--r--librepology/src/v1/stdinapi.rs5
7 files changed, 37 insertions, 12 deletions
diff --git a/librepology/Cargo.toml b/librepology/Cargo.toml
index 51afe45..fcbaa64 100644
--- a/librepology/Cargo.toml
+++ b/librepology/Cargo.toml
@@ -21,7 +21,7 @@ serde_derive = "1"
serde_json = "1"
url = "1.7"
url_serde = "0.2"
-failure = "0.1"
+thiserror = "1"
log = "0.4"
derive_more = "0.14"
derive-new = "0.5"
diff --git a/librepology/src/lib.rs b/librepology/src/lib.rs
index d0904a4..514cac4 100644
--- a/librepology/src/lib.rs
+++ b/librepology/src/lib.rs
@@ -1,4 +1,4 @@
-extern crate failure;
+extern crate thiserror;
extern crate serde;
extern crate serde_json;
extern crate url;
diff --git a/librepology/src/v1/api.rs b/librepology/src/v1/api.rs
index e192022..3d659df 100644
--- a/librepology/src/v1/api.rs
+++ b/librepology/src/v1/api.rs
@@ -1,5 +1,4 @@
-use failure::Fallible as Result;
-
+use crate::v1::error::Result;
use crate::v1::types::Problem;
use crate::v1::types::Package;
diff --git a/librepology/src/v1/error.rs b/librepology/src/v1/error.rs
new file mode 100644
index 0000000..79c556e
--- /dev/null
+++ b/librepology/src/v1/error.rs
@@ -0,0 +1,22 @@
+pub type Result<T> = std::result::Result<T, RepologyError>;
+
+#[derive(thiserror::Error, Debug)]
+pub enum RepologyError {
+ #[error("Borrow mutable error")]
+ BorrowMutErr(#[from] std::cell::BorrowMutError),
+
+ #[error("UTF8 Error")]
+ Utf8Error(#[from] std::string::FromUtf8Error),
+
+ #[error("serde_json error")]
+ SerdeJsonError(#[from] serde_json::Error),
+
+ #[error("IO error")]
+ IoError(#[from] std::io::Error),
+
+ #[error("curl error")]
+ CurlError(#[from] curl::Error),
+
+ #[error("unknown error")]
+ Unknown,
+}
diff --git a/librepology/src/v1/mod.rs b/librepology/src/v1/mod.rs
index 1d5eed6..1d1db8d 100644
--- a/librepology/src/v1/mod.rs
+++ b/librepology/src/v1/mod.rs
@@ -2,3 +2,4 @@ pub mod restapi;
pub mod stdinapi;
pub mod api;
pub mod types;
+pub mod error;
diff --git a/librepology/src/v1/restapi.rs b/librepology/src/v1/restapi.rs
index 1e8711c..e9a6cd1 100644
--- a/librepology/src/v1/restapi.rs
+++ b/librepology/src/v1/restapi.rs
@@ -1,9 +1,9 @@
use std::result::Result as RResult;
-use failure::Error;
-use failure::Fallible as Result;
use curl::easy::Easy2;
+use crate::v1::error::Result;
+use crate::v1::error::RepologyError as Error;
use crate::v1::types::{Package, Problem};
use crate::v1::api::Api;
@@ -43,19 +43,23 @@ impl Api for RestApi {
fn project<N: AsRef<str>>(&self, name: N) -> Result<Vec<Package>> {
let url = format!("{}api/v1/project/{}", self.repology, name.as_ref());
trace!("Request: {}", url);
- serde_json::from_str(&self.send_request(url)?).map_err(Error::from)
+ let response = self.send_request(url)?;
+ serde_json::from_str(&response)
+ .map_err(Error::from)
}
fn problems_for_repo<R: AsRef<str>>(&self, repo: R) -> Result<Vec<Problem>> {
let url = format!("{}api/v1/repository/{}/problems", self.repology, repo.as_ref());
trace!("Request: {}", url);
- serde_json::from_str(&self.send_request(url)?).map_err(Error::from)
+ let response = self.send_request(url)?;
+ serde_json::from_str(&response).map_err(Error::from)
}
fn problems_for_maintainer<M: AsRef<str>>(&self, maintainer: M) -> Result<Vec<Problem>> {
let url = format!("{}api/v1/maintainer/{}/problems", self.repology, maintainer.as_ref());
trace!("Request: {}", url);
- serde_json::from_str(&self.send_request(url)?).map_err(Error::from)
+ let response = self.send_request(url)?;
+ serde_json::from_str(&response).map_err(Error::from)
}
}
diff --git a/librepology/src/v1/stdinapi.rs b/librepology/src/v1/stdinapi.rs
index 61bc093..6c0d38b 100644
--- a/librepology/src/v1/stdinapi.rs
+++ b/librepology/src/v1/stdinapi.rs
@@ -3,9 +3,8 @@ use std::cell::RefCell;
use std::ops::Deref;
use std::ops::DerefMut;
-use failure::Fallible as Result;
-use failure::Error;
-
+use crate::v1::error::Result;
+use crate::v1::error::RepologyError as Error;
use crate::v1::types::Problem;
use crate::v1::types::Package;
use crate::v1::api::Api;