equal
deleted
inserted
replaced
1 use netbuf; |
1 use netbuf; |
2 use std::io::Read; |
2 use std::io::Read; |
3 use std::io::Result; |
3 use std::io::Result; |
|
4 use nom::IResult; |
4 |
5 |
5 mod messages; |
6 pub mod messages; |
6 mod parser; |
7 mod parser; |
7 |
8 |
8 pub struct FrameDecoder { |
9 pub struct ProtocolDecoder { |
9 buf: netbuf::Buf, |
10 buf: netbuf::Buf, |
|
11 consumed: usize, |
10 } |
12 } |
11 |
13 |
12 impl FrameDecoder { |
14 impl ProtocolDecoder { |
13 pub fn new() -> FrameDecoder { |
15 pub fn new() -> ProtocolDecoder { |
14 FrameDecoder { |
16 ProtocolDecoder { |
15 buf: netbuf::Buf::new() |
17 buf: netbuf::Buf::new(), |
|
18 consumed: 0, |
16 } |
19 } |
17 } |
20 } |
18 |
21 |
19 pub fn read_from<R: Read>(&mut self, stream: &mut R) -> Result<usize> { |
22 pub fn read_from<R: Read>(&mut self, stream: &mut R) -> Result<usize> { |
20 self.buf.read_from(stream) |
23 self.buf.read_from(stream) |
21 } |
24 } |
22 |
25 |
23 pub fn extract_messages(&mut self) -> &[u8] { |
26 pub fn extract_messages(&mut self) -> Vec<messages::HWProtocolMessage> { |
24 &self.buf[..] |
27 let parse_result = parser::extract_messages(&self.buf[..]); |
|
28 match parse_result { |
|
29 IResult::Done(tail, msgs) => { |
|
30 self.consumed = self.buf.len() - self.consumed - tail.len(); |
|
31 msgs |
|
32 }, |
|
33 IResult::Incomplete(_) => unreachable!(), |
|
34 IResult::Error(_) => unreachable!(), |
|
35 } |
|
36 } |
|
37 |
|
38 pub fn sweep(&mut self) { |
|
39 self.buf.consume(self.consumed); |
|
40 self.consumed = 0; |
25 } |
41 } |
26 } |
42 } |