lzma_rs/encode/lzma2.rs
1use byteorder::{BigEndian, WriteBytesExt};
2use std::io;
3
4pub fn encode_stream<R, W>(input: &mut R, output: &mut W) -> io::Result<()>
5where
6 R: io::BufRead,
7 W: io::Write,
8{
9 let mut buf = vec![0u8; 0x10000];
10 loop {
11 let n = input.read(&mut buf)?;
12 if n == 0 {
13 // status = EOF
14 output.write_u8(0)?;
15 break;
16 }
17
18 // status = uncompressed reset dict
19 output.write_u8(1)?;
20 // unpacked size
21 output.write_u16::<BigEndian>((n - 1) as u16)?;
22 // contents
23 output.write_all(&buf[..n])?;
24 }
25 Ok(())
26}