aboutsummaryrefslogtreecommitdiff
path: root/src/api/error.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2021-12-22 18:50:08 +0100
committerAlex Auvolat <alex@adnab.me>2022-01-04 12:47:28 +0100
commitd8ab5bdc3e20759e5ba8a6844393757da3539372 (patch)
tree7fc9abc578bb4185691313889ed94aedca09dbc4 /src/api/error.rs
parentc7d5c732442c5802058b46205d450d4620772b7b (diff)
downloadgarage-d8ab5bdc3e20759e5ba8a6844393757da3539372.tar.gz
garage-d8ab5bdc3e20759e5ba8a6844393757da3539372.zip
New buckets for 0.6.0: fix model and migration
Diffstat (limited to 'src/api/error.rs')
-rw-r--r--src/api/error.rs37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/api/error.rs b/src/api/error.rs
index 9bb8f8e2..828a2342 100644
--- a/src/api/error.rs
+++ b/src/api/error.rs
@@ -156,62 +156,67 @@ impl Error {
/// Trait to map error to the Bad Request error code
pub trait OkOrBadRequest {
- type S2;
- fn ok_or_bad_request(self, reason: &'static str) -> Self::S2;
+ type S;
+ fn ok_or_bad_request<M: AsRef<str>>(self, reason: M) -> Result<Self::S, Error>;
}
impl<T, E> OkOrBadRequest for Result<T, E>
where
E: std::fmt::Display,
{
- type S2 = Result<T, Error>;
- fn ok_or_bad_request(self, reason: &'static str) -> Result<T, Error> {
+ type S = T;
+ fn ok_or_bad_request<M: AsRef<str>>(self, reason: M) -> Result<T, Error> {
match self {
Ok(x) => Ok(x),
- Err(e) => Err(Error::BadRequest(format!("{}: {}", reason, e))),
+ Err(e) => Err(Error::BadRequest(format!(
+ "{}: {}",
+ reason.as_ref(),
+ e.to_string()
+ ))),
}
}
}
impl<T> OkOrBadRequest for Option<T> {
- type S2 = Result<T, Error>;
- fn ok_or_bad_request(self, reason: &'static str) -> Result<T, Error> {
+ type S = T;
+ fn ok_or_bad_request<M: AsRef<str>>(self, reason: M) -> Result<T, Error> {
match self {
Some(x) => Ok(x),
- None => Err(Error::BadRequest(reason.to_string())),
+ None => Err(Error::BadRequest(reason.as_ref().to_string())),
}
}
}
/// Trait to map an error to an Internal Error code
pub trait OkOrInternalError {
- type S2;
- fn ok_or_internal_error(self, reason: &'static str) -> Self::S2;
+ type S;
+ fn ok_or_internal_error<M: AsRef<str>>(self, reason: M) -> Result<Self::S, Error>;
}
impl<T, E> OkOrInternalError for Result<T, E>
where
E: std::fmt::Display,
{
- type S2 = Result<T, Error>;
- fn ok_or_internal_error(self, reason: &'static str) -> Result<T, Error> {
+ type S = T;
+ fn ok_or_internal_error<M: AsRef<str>>(self, reason: M) -> Result<T, Error> {
match self {
Ok(x) => Ok(x),
Err(e) => Err(Error::InternalError(GarageError::Message(format!(
"{}: {}",
- reason, e
+ reason.as_ref(),
+ e
)))),
}
}
}
impl<T> OkOrInternalError for Option<T> {
- type S2 = Result<T, Error>;
- fn ok_or_internal_error(self, reason: &'static str) -> Result<T, Error> {
+ type S = T;
+ fn ok_or_internal_error<M: AsRef<str>>(self, reason: M) -> Result<T, Error> {
match self {
Some(x) => Ok(x),
None => Err(Error::InternalError(GarageError::Message(
- reason.to_string(),
+ reason.as_ref().to_string(),
))),
}
}