rust_libindy_wrapper/utils/
results.rs

1use ErrorCode;
2
3use std::sync::mpsc::Receiver;
4use std::time::Duration;
5
6pub struct ResultHandler {}
7
8impl ResultHandler {
9    pub fn empty(err: ErrorCode, receiver: Receiver<ErrorCode>) -> Result<(), ErrorCode> {
10        err.try_err()?;
11        match receiver.recv() {
12            Ok(err) => err.try_err(),
13            Err(e) => Err(ErrorCode::from(e))
14        }
15    }
16
17    pub fn empty_timeout(err: ErrorCode, receiver: Receiver<ErrorCode>, timeout: Duration) -> Result<(), ErrorCode> {
18        err.try_err()?;
19
20        match receiver.recv_timeout(timeout) {
21            Ok(err) => err.try_err(),
22            Err(e) => Err(ErrorCode::from(e))
23        }
24    }
25
26    pub fn one<T>(err: ErrorCode, receiver: Receiver<(ErrorCode, T)>) -> Result<T, ErrorCode> {
27        err.try_err()?;
28
29        let (err, val) = receiver.recv()?;
30
31        err.try_err()?;
32
33        Ok(val)
34    }
35
36    pub fn one_timeout<T>(err: ErrorCode, receiver: Receiver<(ErrorCode, T)>, timeout: Duration) -> Result<T, ErrorCode> {
37        err.try_err()?;
38
39        match receiver.recv_timeout(timeout) {
40            Ok((err, val)) =>  {
41                err.try_err()?;
42                Ok(val)
43            },
44            Err(e) => Err(ErrorCode::from(e))
45        }
46    }
47
48    pub fn two<T1, T2>(err: ErrorCode, receiver: Receiver<(ErrorCode, T1, T2)>) -> Result<(T1, T2), ErrorCode> {
49        err.try_err()?;
50
51        let (err, val, val2) = receiver.recv()?;
52
53        err.try_err()?;
54
55        Ok((val, val2))
56    }
57
58    pub fn two_timeout<T1, T2>(err: ErrorCode, receiver: Receiver<(ErrorCode, T1, T2)>, timeout: Duration) -> Result<(T1, T2), ErrorCode> {
59        err.try_err()?;
60
61        match receiver.recv_timeout(timeout) {
62            Ok((err, val1, val2)) =>  {
63                err.try_err()?;
64                Ok((val1, val2))
65            },
66            Err(e) => Err(ErrorCode::from(e))
67        }
68    }
69
70    pub fn three<T1, T2, T3>(err: ErrorCode, receiver: Receiver<(ErrorCode, T1, T2, T3)>) -> Result<(T1, T2, T3), ErrorCode> {
71        err.try_err()?;
72
73        let (err, val, val2, val3) = receiver.recv()?;
74
75        err.try_err()?;
76
77        Ok((val, val2, val3))
78    }
79
80    pub fn three_timeout<T1, T2, T3>(err: ErrorCode, receiver: Receiver<(ErrorCode, T1, T2, T3)>, timeout: Duration) -> Result<(T1, T2, T3), ErrorCode> {
81        err.try_err()?;
82
83        match receiver.recv_timeout(timeout) {
84            Ok((err, val1, val2, val3)) =>  {
85                err.try_err()?;
86                Ok((val1, val2, val3))
87            },
88            Err(e) => Err(ErrorCode::from(e))
89        }
90    }
91}