1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#[macro_export]
macro_rules! proto {
    ($s : expr) => { ::std::borrow::Cow::Borrowed($s) }
}

#[macro_export]
macro_rules! unwrap_ret {
    ($res : expr, $err : expr) => {
        match $res {
            Ok(i) => i,
            Err(e) => return Err($err(e))
        }
    }
}

#[macro_export]
macro_rules! to_bytes {
    ($e : expr, $v : expr) => { quick_protobuf::Writer::new($v).write_message($e) };
    (varint, $e : expr, $v : expr) => { quick_protobuf::Writer::new($v).write_varint($e) }
}

#[macro_export]
macro_rules! from_bytes {
    (varint32, $v : expr) => { quick_protobuf::BytesReader::from_bytes($v).read_varint32($v) };
    ($t : tt, $v : expr) => { $t::from_reader(&mut quick_protobuf::BytesReader::from_bytes($v), $v) }
}

#[macro_export]
macro_rules! make_request {
    ($service : expr, $procedure : expr, $args : expr) => {{
        let mut request : Request = Request::new();
        request.set_service($service);
        request.set_procedure($procedure);
        for i in 0 .. $args.len() {
            let mut arg = Argument::new();
            arg.set_position(i as u32);
            arg.set_value($args[i].clone());
            request.arguments.push(arg);
        }
        request
   }}
}

#[macro_export]
macro_rules! unwrap_response {
    ($response : expr) => {{
        if $response.has_error { Err(TransceiverError::ResponseHasError($response.error)) }
        else if $response.has_return_value { Ok(Some($response.return_value)) }
        else { Ok(None) }
    }}
}