Skip to main content

cooplan_util/
error_handler.rs

1pub trait ErrorHandler<OkType, ErrType>
2where
3    ErrType: Clone,
4{
5    fn handle_error(self, error: ErrType) -> Result<OkType, ErrType>;
6}
7
8impl<ReplierOkType, OkType, ErrType> ErrorHandler<OkType, ErrType>
9    for tokio::sync::oneshot::Sender<Result<ReplierOkType, ErrType>>
10where
11    ErrType: Clone,
12{
13    fn handle_error(self, error: ErrType) -> Result<OkType, ErrType> {
14        match self.send(Err(error.clone())) {
15            Ok(_) => (),
16            Err(_) => log::error!("failed to reply"),
17        }
18
19        Err(error)
20    }
21}
22
23#[cfg(test)]
24#[test]
25fn returns_error() {
26    const ERROR: &str = "this is the error";
27
28    let (sender, receiver) = tokio::sync::oneshot::channel::<Result<&str, &str>>();
29    let result_error: Result<(), &str> = sender.handle_error(ERROR);
30
31    assert_eq!(ERROR, result_error.unwrap_err());
32}