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}