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
use crate::{DecodeError, DecodeResult, Decoder, Message};
impl<'a> Decoder<'a> {
pub fn message(&mut self) -> DecodeResult<Message> {
let (header, body) = self.message_header()?;
self.algin(8)?;
if let Some((body_length, body_signature)) = body {
let end = self.offset + body_length as usize;
let is_le = header.is_le;
let body = self.value(is_le, &body_signature)?;
if end == self.offset {
Ok(Message { header, body })
} else {
Err(DecodeError::BodyLength(end, self.offset))
}
} else {
Ok(Message {
header,
body: Vec::new(),
})
}
}
}