/rust/registry/src/index.crates.io-6f17d22bba15001f/httparse-1.10.1/src/macros.rs
Line | Count | Source (jump to first uncovered line) |
1 | | //! Utility macros |
2 | | |
3 | | macro_rules! next { |
4 | | ($bytes:ident) => ({ |
5 | | match $bytes.next() { |
6 | | Some(b) => b, |
7 | | None => return Ok(Status::Partial) |
8 | | } |
9 | | }) |
10 | | } |
11 | | |
12 | | macro_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 | | |
24 | | macro_rules! complete { |
25 | | ($e:expr) => { |
26 | | match $e? { |
27 | | Status::Complete(v) => v, |
28 | | Status::Partial => return Ok(Status::Partial) |
29 | | } |
30 | | } |
31 | | } |
32 | | |
33 | | macro_rules! byte_map { |
34 | | ($($p:pat)|+) => {{ |
35 | 0 | const fn make_map() -> [bool; 256] { |
36 | 0 | let mut ret = [false; 256]; |
37 | 0 | let mut i = 0; |
38 | 0 | while i < 256 { |
39 | 0 | ret[i] = matches!(i as u8, $($p)|+); |
40 | 0 | i += 1; |
41 | | } |
42 | 0 | ret |
43 | 0 | } Unexecuted instantiation: httparse::URI_MAP::make_map Unexecuted instantiation: httparse::TOKEN_MAP::make_map Unexecuted instantiation: httparse::HEADER_VALUE_MAP::make_map |
44 | | make_map() |
45 | | }} |
46 | | } |
47 | | |
48 | | macro_rules! space { |
49 | | ($bytes:ident or $err:expr) => ({ |
50 | | expect!($bytes.next() == b' ' => Err($err)); |
51 | | $bytes.slice(); |
52 | | }) |
53 | | } |
54 | | |
55 | | macro_rules! newline { |
56 | | ($bytes:ident) => ({ |
57 | | match next!($bytes) { |
58 | | b'\r' => { |
59 | | expect!($bytes.next() == b'\n' => Err(Error::NewLine)); |
60 | | $bytes.slice(); |
61 | | }, |
62 | | b'\n' => { |
63 | | $bytes.slice(); |
64 | | }, |
65 | | _ => return Err(Error::NewLine) |
66 | | } |
67 | | }) |
68 | | } |