buffered_reader/
decompress_bzip2.rs1use std::io;
2use std::fmt;
3
4use bzip2::read::BzDecoder;
5
6use super::*;
7
8
9#[derive(Debug)]
12pub struct Bzip<R: BufferedReader<C>, C: fmt::Debug + Sync + Send> {
13 reader: Generic<BzDecoder<R>, C>,
14}
15
16assert_send_and_sync!(Bzip<R, C>
17 where R: BufferedReader<C>,
18 C: fmt::Debug);
19
20impl <R: BufferedReader<()>> Bzip<R, ()> {
21 pub fn new(reader: R) -> Self {
25 Self::with_cookie(reader, ())
26 }
27}
28
29impl <R: BufferedReader<C>, C: fmt::Debug + Sync + Send> Bzip<R, C> {
30 pub fn with_cookie(reader: R, cookie: C) -> Self {
35 Bzip {
36 reader: Generic::with_cookie(
37 BzDecoder::new(reader), None, cookie),
38 }
39 }
40}
41
42impl<R: BufferedReader<C>, C: fmt::Debug + Sync + Send> io::Read for Bzip<R, C> {
43 fn read(&mut self, buf: &mut [u8]) -> Result<usize, io::Error> {
44 self.reader.read(buf)
45 }
46}
47
48impl<R: BufferedReader<C>, C: fmt::Debug + Sync + Send> fmt::Display for Bzip<R, C> {
49 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
50 f.debug_struct("Bzip").finish()
51 }
52}
53
54impl<R: BufferedReader<C>, C: fmt::Debug + Send + Sync> BufferedReader<C> for Bzip<R, C> {
55 fn buffer(&self) -> &[u8] {
56 self.reader.buffer()
57 }
58
59 fn data(&mut self, amount: usize) -> Result<&[u8], io::Error> {
60 self.reader.data(amount)
61 }
62
63 fn data_hard(&mut self, amount: usize) -> Result<&[u8], io::Error> {
64 self.reader.data_hard(amount)
65 }
66
67 fn data_eof(&mut self) -> Result<&[u8], io::Error> {
68 self.reader.data_eof()
69 }
70
71 fn consume(&mut self, amount: usize) -> &[u8] {
72 self.reader.consume(amount)
73 }
74
75 fn data_consume(&mut self, amount: usize)
76 -> Result<&[u8], io::Error> {
77 self.reader.data_consume(amount)
78 }
79
80 fn data_consume_hard(&mut self, amount: usize) -> Result<&[u8], io::Error> {
81 self.reader.data_consume_hard(amount)
82 }
83
84 fn read_be_u16(&mut self) -> Result<u16, io::Error> {
85 self.reader.read_be_u16()
86 }
87
88 fn read_be_u32(&mut self) -> Result<u32, io::Error> {
89 self.reader.read_be_u32()
90 }
91
92 fn steal(&mut self, amount: usize) -> Result<Vec<u8>, io::Error> {
93 self.reader.steal(amount)
94 }
95
96 fn steal_eof(&mut self) -> Result<Vec<u8>, io::Error> {
97 self.reader.steal_eof()
98 }
99
100 fn get_mut(&mut self) -> Option<&mut dyn BufferedReader<C>> {
101 Some(self.reader.reader_mut().get_mut())
102 }
103
104 fn get_ref(&self) -> Option<&dyn BufferedReader<C>> {
105 Some(self.reader.reader_ref().get_ref())
106 }
107
108 fn into_inner<'b>(self: Box<Self>)
109 -> Option<Box<dyn BufferedReader<C> + 'b>> where Self: 'b {
110 Some(self.reader.into_reader().into_inner().into_boxed())
112 }
113
114 fn cookie_set(&mut self, cookie: C) -> C {
115 self.reader.cookie_set(cookie)
116 }
117
118 fn cookie_ref(&self) -> &C {
119 self.reader.cookie_ref()
120 }
121
122 fn cookie_mut(&mut self) -> &mut C {
123 self.reader.cookie_mut()
124 }
125}