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
52
53
54
55
#[derive(Debug, PartialEq, Clone)]
pub enum Method {
    Null,
    Get,
}

pub fn align_method(vec: &[u8]) -> [u8; 3] {
    let len = vec.len();
    if len < 3 || len > 3 {
        return [0; 3];
    }
    let mut buf = [0; 3];
    buf.copy_from_slice(vec);
    buf
}

#[macro_export]
macro_rules! get_method_enum {
    ($v: expr) => {
        match $v {
            [71, 69, 84] => Method::Get,
            _ => Method::Null,
        }
    };
}

#[test]
fn get_method_enum_test_get() {
    assert_eq!(get_method_enum!(align_method(b"GET")), Method::Get);
}

#[test]
fn get_method_enum_test_null() {
    assert_eq!(get_method_enum!(align_method(b"NULL")), Method::Null);
}

#[macro_export]
macro_rules! get_method_enum_value {
    ($a: expr) => {
        match $a {
            Method::Get => vec![71u8, 69, 84],
            _ => vec![],
        }
    };
}

#[test]
fn get_method_enum_value_test_get() {
    assert_eq!(get_method_enum_value!(Method::Get), b"GET");
}

#[test]
fn get_method_enum_value_test_null() {
    assert_eq!(get_method_enum_value!(Method::Null), b"");
}