relay_server/managed/
utils.rs

1use crate::managed::{Counted, Managed, OutcomeError, Rejected};
2use crate::services::outcome::Outcome;
3
4/// Extension trait for Results, which adds convenience functions to work with errors and [`Managed`].
5pub trait ManagedResult<T, E> {
6    /// Reject the entire [`Managed`] instance with `E`.
7    fn reject<M>(self, managed: &Managed<M>) -> Result<T, Rejected<E::Error>>
8    where
9        Self: Sized,
10        M: Counted,
11        E: OutcomeError;
12
13    /// Wraps the error of the [`Result`] with an outcome.
14    fn with_outcome(self, outcome: Outcome) -> Result<T, (Outcome, E)>
15    where
16        Self: Sized;
17}
18
19impl<T, E> ManagedResult<T, E> for Result<T, E> {
20    fn reject<M>(self, managed: &Managed<M>) -> Result<T, Rejected<E::Error>>
21    where
22        Self: Sized,
23        M: Counted,
24        E: OutcomeError,
25    {
26        self.map_err(|err| managed.reject_err(err))
27    }
28
29    fn with_outcome(self, outcome: Outcome) -> Result<T, (Outcome, E)>
30    where
31        Self: Sized,
32    {
33        self.map_err(|err| (outcome, err))
34    }
35}