use crate::RaftTypeConfig;
use crate::errors::Fatal;
use crate::errors::Infallible;
use crate::errors::RaftError;
pub(crate) trait IntoRaftResult<C, T, E>
where C: RaftTypeConfig
{
fn into_raft_result(self) -> Result<T, RaftError<C, E>>;
}
impl<C, T, E> IntoRaftResult<C, T, E> for Result<Result<T, E>, Fatal<C>>
where C: RaftTypeConfig
{
fn into_raft_result(self) -> Result<T, RaftError<C, E>> {
match self {
Ok(Ok(t)) => Ok(t),
Ok(Err(e)) => Err(RaftError::APIError(e)),
Err(f) => Err(RaftError::Fatal(f)),
}
}
}
impl<C, T> IntoRaftResult<C, T, Infallible> for Result<T, Fatal<C>>
where C: RaftTypeConfig
{
fn into_raft_result(self) -> Result<T, RaftError<C>> {
self.map_err(RaftError::Fatal)
}
}