rust_libindy_wrapper/utils/
results.rs1use 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}