httparse/
macros.rs

1//! Utility macros
2
3macro_rules! next {
4    ($bytes:ident) => ({
5        match $bytes.next() {
6            Some(b) => b,
7            None => return Ok(Status::Partial)
8        }
9    })
10}
11
12macro_rules! expect {
13    ($bytes:ident.next() == $pat:pat => $ret:expr) => {
14        expect!(next!($bytes) => $pat |? $ret)
15    };
16    ($e:expr => $pat:pat |? $ret:expr) => {
17        match $e {
18            v@$pat => v,
19            _ => return $ret
20        }
21    };
22}
23
24macro_rules! complete {
25    ($e:expr) => {
26        match $e? {
27            Status::Complete(v) => v,
28            Status::Partial => return Ok(Status::Partial)
29        }
30    }
31}
32
33macro_rules! byte_map {
34    ($($flag:expr,)*) => ([
35        $($flag != 0,)*
36    ])
37}
38
39macro_rules! space {
40    ($bytes:ident or $err:expr) => ({
41        expect!($bytes.next() == b' ' => Err($err));
42        $bytes.slice();
43    })
44}
45
46macro_rules! newline {
47    ($bytes:ident) => ({
48        match next!($bytes) {
49            b'\r' => {
50                expect!($bytes.next() == b'\n' => Err(Error::NewLine));
51                $bytes.slice();
52            },
53            b'\n' => {
54                $bytes.slice();
55            },
56            _ => return Err(Error::NewLine)
57        }
58    })
59}