bytecodec/
macros.rs

1/// Tries to encode items to the given buffer.
2///
3/// Conceptually, this macro is expanded to the following expression.
4///
5/// ```ignore
6/// if !$encoder.is_idle() {
7///     $offset += track!($encoder.encode(&mut $buf[$offset..], $eos))?;
8///     if !$encoder.is_idle() {
9///         return Ok($offset);
10///     }
11/// }
12/// ```
13#[macro_export]
14macro_rules! bytecodec_try_encode {
15    ($encoder:expr, $offset:expr, $buf:expr, $eos:expr) => {
16        if !$encoder.is_idle() {
17            $offset += track!($encoder.encode(&mut $buf[$offset..], $eos))?;
18            if !$encoder.is_idle() {
19                return Ok($offset);
20            }
21        }
22    };
23    ($encoder:expr, $offset:expr, $buf:expr, $eos:expr, $($track_arg:tt)*) => {
24        if !$encoder.is_idle() {
25            $offset += track!($encoder.encode(&mut $buf[$offset..], $eos), $($track_arg)*)?;
26            if !$encoder.is_idle() {
27                return Ok($offset);
28            }
29        }
30    };
31    ($encoder:expr, $offset:expr, $buf:expr, $eos:expr; $($track_arg:tt)*) => {
32        if !$encoder.is_idle() {
33            $offset += track!($encoder.encode(&mut $buf[$offset..], $eos); $($track_arg)*)?;
34            if !$encoder.is_idle() {
35                return Ok($offset);
36            }
37        }
38    };
39}
40
41/// Tries to decode an item from the given buffer.
42///
43/// Conceptually, this macro is expanded to the following expression.
44///
45/// ```ignore
46/// if !$decoder.is_idle() {
47///     $offset += track!($decoder.decode(&$buf[$offset..], $eos))?;
48///     if !$decoder.is_idle() {
49///         return Ok($offset);
50///     }
51/// }
52/// ```
53#[macro_export]
54macro_rules! bytecodec_try_decode {
55    ($decoder:expr, $offset:expr, $buf:expr, $eos:expr) => {
56        if !$decoder.is_idle() {
57            $offset += track!($decoder.decode(&$buf[$offset..], $eos))?;
58            if !$decoder.is_idle() {
59                return Ok($offset);
60            }
61        }
62    };
63    ($decoder:expr, $offset:expr, $buf:expr, $eos:expr, $($track_arg:tt)*) => {
64        if !$decoder.is_idle() {
65            $offset += track!($decoder.decode(&$buf[$offset..], $eos), $($track_arg)*)?;
66            if !$decoder.is_idle() {
67                return Ok($offset);
68            }
69        }
70    };
71    ($decoder:expr, $offset:expr, $buf:expr, $eos:expr; $($track_arg:tt)*) => {
72        if !$decoder.is_idle() {
73            $offset += track!($decoder.decode(&$buf[$offset..], $eos); $($track_arg)*)?;
74            if !$decoder.is_idle() {
75                return Ok($offset);
76            }
77        }
78    };
79}