use super::{super::super::problem::*, into::*, problem::*};
use std::error::Error;
#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
pub trait IntoSerdeProblemResult<OkT> {
fn into_serde_serialize_problem(self) -> Result<OkT, SerdeProblem>;
fn into_serde_deserialize_problem(self) -> Result<OkT, SerdeProblem>;
}
impl<OkT, ErrorT> IntoSerdeProblemResult<OkT> for Result<OkT, ErrorT>
where
ErrorT: 'static + Error + Send + Sync,
{
#[track_caller]
fn into_serde_serialize_problem(self) -> Result<OkT, SerdeProblem> {
match self {
Ok(ok) => Ok(ok),
Err(error) => Err(error.into_serde_serialize_problem()),
}
}
#[track_caller]
fn into_serde_deserialize_problem(self) -> Result<OkT, SerdeProblem> {
match self {
Ok(ok) => Ok(ok),
Err(error) => Err(error.into_serde_deserialize_problem()),
}
}
}
#[cfg_attr(docsrs, doc(cfg(feature = "serde")))]
pub trait FromSerdeProblemResult<OkT> {
fn from_serde_problem(self) -> Result<OkT, Problem>;
}
impl<OkT> FromSerdeProblemResult<OkT> for Result<OkT, SerdeProblem> {
fn from_serde_problem(self) -> Result<OkT, Problem> {
self.map_err(|serde_problem| serde_problem.problem)
}
}