moq_async/close.rs
1use std::error::Error;
2
3pub trait Close<E: Error + Clone> {
4 fn close(&mut self, err: E);
5}
6
7pub trait OrClose<S: Close<E>, V, E: Error + Clone> {
8 fn or_close(self, stream: &mut S) -> Result<V, E>;
9}
10
11impl<S: Close<E>, V, E: Error + Clone> OrClose<S, V, E> for Result<V, E> {
12 fn or_close(self, stream: &mut S) -> Result<V, E> {
13 match self {
14 Ok(v) => Ok(v),
15 Err(err) => {
16 stream.close(err.clone());
17 Err(err)
18 }
19 }
20 }
21}