binreader_internal_macros/
adders.rs1#[cfg(feature = "nom")]
2#[macro_use]
3mod nom;
4
5make_add_macro! {
6 name: add_borrow;
7 type: ::std::borrow::Borrow<[u8]>;
8 body: {
9 fn borrow(&self) -> &[u8] {
10 self.as_ref()
11 }
12 }
13}
14
15make_add_macro! {
16 name: add_read;
17 type: ::std::io::Read;
18 body: {
19 fn read(&mut self, buf: &mut [u8]) -> ::std::io::Result<usize> {
20 if self.remaining() > buf.len() {
21 self.next_bytes(buf)?;
22 Ok(buf.len())
23 } else {
24 let read = self.remaining();
25 for i in 0..read {
26 buf[i] = self.next_u8()?;
27 }
28 Ok(read)
29 }
30 }
31 }
32}
33
34make_add_macro! {
35 name: add_seek;
36 type: ::std::io::Seek;
37 body: {
38 fn seek(&mut self, pos: ::std::io::SeekFrom) -> ::std::io::Result<u64> {
39 match pos {
40 ::std::io::SeekFrom::Start(to) => self.advance_to(to as usize)?,
41 ::std::io::SeekFrom::Current(by) => self.advance_to(
42 (self.current_offset() as i64 + by) as usize)?,
43 ::std::io::SeekFrom::End(point) => self.advance_to(
44 (self.upper_offset_limit() as i64 - point) as usize)?,
45 };
46 Ok(self.current_offset() as u64)
47 }
48 }
49}
50
51make_add_macro! {
52 name: add_bufread;
53 type: ::std::io::BufRead;
54 body: {
55 fn fill_buf(&mut self) -> ::std::io::Result<&[u8]> {
56 if self.remaining() >= 4096 {
57 Ok(self.subseq(self.current_offset(), 4096)?)
58 } else {
59 Ok(self.subseq(self.current_offset(), self.remaining())?)
60 }
61 }
62
63 fn consume(&mut self, amt: usize) {
64 if !self.is_empty() {
65 if self.remaining() < amt {
66 self.advance_by(self.remaining() as isize).unwrap();
67 } else {
68 self.advance_by(amt as isize).unwrap();
69 }
70 }
71 }
72 }
73}