1use std::io;
2
3use crate::consts::*;
4use crate::error::Error;
5use crate::io::{Reader, Writer};
6
7impl<R> Reader<R>
8where
9 R: io::Read,
10{
11 pub fn recv(&mut self) -> Result<Vec<u8>, Error> {
12 let u = self.read_u16()?;
13
14 if self.read_u8()? != ERL_VERSION_MAGIC {
15 return Err(invalid_data!("ERL_VERSION_MAGIC"));
16 }
17
18 self.read_exact_usize(u as usize - 1)
19 }
20}
21
22impl<W> Writer<W>
23where
24 W: io::Write,
25{
26 pub fn send(&mut self, v: &[u8]) -> Result<(), Error> {
27 self.write_u16(v.len() as u16 + 1)?;
28 self.write_u8(ERL_VERSION_MAGIC)?;
29 self.write_all(v)?;
30 self.flush()
31 }
32}