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}