mod bitreader;
mod decoder;
mod encoder;
mod encoder_bitwriter;
mod encoder_fse;
mod encoder_huffman;
mod encoder_seq;
mod fse;
mod huffman;
mod literals;
mod matcher;
mod sequences;
pub use decoder::Decoder;
pub use encoder::{Encoder, EncoderConfig};
#[doc(hidden)]
pub mod _internal_test_api {
use crate::error::Error;
pub fn decode_compressed_block_body(body: &[u8]) -> Result<alloc::vec::Vec<u8>, Error> {
use alloc::vec::Vec;
let mut lit_state = super::literals::LiteralsState::default();
let mut seq_state = super::sequences::SequencesState::new();
let lit = super::literals::decode_literals(body, &mut lit_state)?;
let seq_data = &body[lit.consumed..];
let seqs = super::sequences::decode_sequences(seq_data, &mut seq_state)?;
let mut out: Vec<u8> = Vec::new();
super::sequences::execute_sequences(&seqs, &lit.literals, &mut out)?;
Ok(out)
}
pub fn decode_literals_for_test(body: &[u8]) -> Result<(alloc::vec::Vec<u8>, usize), Error> {
let mut s = super::literals::LiteralsState::default();
let r = super::literals::decode_literals(body, &mut s)?;
Ok((r.literals, r.consumed))
}
pub fn decode_sequences_for_test(seq_data: &[u8]) -> Result<usize, Error> {
let mut s = super::sequences::SequencesState::new();
let seqs = super::sequences::decode_sequences(seq_data, &mut s)?;
Ok(seqs.len())
}
pub fn default_ll_entries() -> alloc::vec::Vec<(u16, u8, u16)> {
let t = super::fse::default_ll_table();
t.entries
.iter()
.map(|e| (e.symbol, e.num_bits, e.base_state))
.collect()
}
pub fn default_ml_entries() -> alloc::vec::Vec<(u16, u8, u16)> {
let t = super::fse::default_ml_table();
t.entries
.iter()
.map(|e| (e.symbol, e.num_bits, e.base_state))
.collect()
}
pub fn default_of_entries() -> alloc::vec::Vec<(u16, u8, u16)> {
let t = super::fse::default_of_table();
t.entries
.iter()
.map(|e| (e.symbol, e.num_bits, e.base_state))
.collect()
}
pub fn huff_tree_weights_for_test(data: &[u8]) -> Result<alloc::vec::Vec<u8>, Error> {
super::huffman::decode_huffman_tree_weights_for_test(data)
}
}
use crate::traits::Algorithm;
#[derive(Debug, Clone, Copy, Default)]
pub struct Zstd;
impl Algorithm for Zstd {
const NAME: &'static str = "zstd";
type Encoder = Encoder;
type Decoder = Decoder;
type EncoderConfig = EncoderConfig;
type DecoderConfig = ();
fn encoder_with(c: Self::EncoderConfig) -> Encoder {
Encoder::with_config(c)
}
fn decoder_with(_: ()) -> Decoder {
Decoder::new()
}
}