/
test_type_enum.rs
84 lines (68 loc) · 2.5 KB
/
test_type_enum.rs
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use jppe_derive::{ByteEncode, ByteDecode};
use jppe::{ByteDecode, ByteEncode};
#[derive(Debug, PartialEq, Eq, ByteEncode, ByteDecode)]
struct TestTypeStructEnumExample {
pub cmd: u16,
#[jppe(branch="cmd")]
pub body: TestTypeEnumExampleBody,
}
#[derive(Debug, PartialEq, Eq, ByteEncode, ByteDecode)]
#[repr(u16)]
enum TestTypeEnumExampleBody {
V0 = 0x0001,
V1(u8),
V2(u8, u16),
V3((u8, u16)),
V4 {
a: u8,
b: u16,
},
#[jppe(enum_default)]
Unknown,
}
#[test]
fn test_type_enum() {
// V0
let value = TestTypeStructEnumExample { cmd: 1, body: TestTypeEnumExampleBody::V0 };
let mut buf = vec![];
value.encode(&mut buf, None, None);
assert_eq!(buf, vec![0x00, 0x01]);
let (input, value2) = TestTypeStructEnumExample::decode(&[0x00, 0x01], None, None).unwrap();
assert_eq!(value2, value);
assert_eq!(input.is_empty(), true);
// V1
let value = TestTypeStructEnumExample { cmd: 2, body: TestTypeEnumExampleBody::V1(1) };
let mut buf = vec![];
value.encode(&mut buf, None, None);
assert_eq!(buf, vec![0x00, 0x02, 0x01]);
let (input, value2) = TestTypeStructEnumExample::decode(&[0x00, 0x02, 0x01], None, None).unwrap();
assert_eq!(value2, value);
assert_eq!(input.is_empty(), true);
// V2
let input = vec![0x00, 0x03, 0x01, 0x00, 0x02];
let value = TestTypeStructEnumExample { cmd: 3, body: TestTypeEnumExampleBody::V2(1, 2) };
let mut buf = vec![];
value.encode(&mut buf, None, None);
assert_eq!(buf, input);
let (input, value2) = TestTypeStructEnumExample::decode(&input, None, None).unwrap();
assert_eq!(value2, value);
assert_eq!(input.is_empty(), true);
// V3
let input = vec![0x00, 0x04, 0x01, 0x00, 0x02];
let value = TestTypeStructEnumExample { cmd: 4, body: TestTypeEnumExampleBody::V3((1, 2)) };
let mut buf = vec![];
value.encode(&mut buf, None, None);
assert_eq!(buf, input);
let (input, value2) = TestTypeStructEnumExample::decode(&input, None, None).unwrap();
assert_eq!(value2, value);
assert_eq!(input.is_empty(), true);
// V4
let input = vec![0x00, 0x05, 0x01, 0x00, 0x02];
let value = TestTypeStructEnumExample { cmd: 5, body: TestTypeEnumExampleBody::V4 {a: 1, b: 2}};
let mut buf = vec![];
value.encode(&mut buf, None, None);
assert_eq!(buf, input);
let (input, value2) = TestTypeStructEnumExample::decode(&input, None, None).unwrap();
assert_eq!(value2, value);
assert_eq!(input.is_empty(), true);
}