#[cfg(feature = "wasm")]
#[derive(Debug)]
pub enum WasmCompressedData<T> {
Dense(Vec<T>),
Sparse(WasmSparseData<T>),
Quantized(WasmQuantizedData),
RunLength(WasmRunLengthData<T>),
}
#[cfg(feature = "wasm")]
#[derive(Debug)]
pub struct WasmSparseData<T> {
pub values: Vec<T>,
pub row_ptr: Vec<u32>,
pub col_indices: Vec<u32>,
pub nnz: usize,
}
#[cfg(feature = "wasm")]
#[derive(Debug)]
pub struct WasmQuantizedData {
pub quantized_values: Vec<u8>,
pub scale: f32,
pub zero_point: i32,
pub bit_width: u8,
}
#[cfg(feature = "wasm")]
#[derive(Debug)]
pub struct WasmRunLengthData<T> {
pub values: Vec<T>,
pub lengths: Vec<u32>,
}
#[cfg(feature = "wasm")]
#[derive(Debug, Clone)]
pub struct CompressionConfig {
pub brotli: bool,
pub gzip: bool,
pub compression_level: u8,
pub compress_weights: bool,
}
#[cfg(feature = "wasm")]
impl Default for CompressionConfig {
fn default() -> Self {
Self {
brotli: true,
gzip: true,
compression_level: 9,
compress_weights: true,
}
}
}
#[cfg(feature = "wasm")]
impl CompressionConfig {
pub fn new() -> Self {
Self::default()
}
pub fn minimal() -> Self {
Self {
brotli: true,
gzip: false,
compression_level: 9,
compress_weights: true,
}
}
pub fn fast() -> Self {
Self {
brotli: false,
gzip: true,
compression_level: 1,
compress_weights: false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[cfg(feature = "wasm")]
fn test_compression_config() {
let config = CompressionConfig::new();
assert!(config.brotli);
assert_eq!(config.compression_level, 9);
let minimal = CompressionConfig::minimal();
assert!(minimal.brotli);
assert!(!minimal.gzip);
let fast = CompressionConfig::fast();
assert!(!fast.brotli);
assert!(fast.gzip);
assert_eq!(fast.compression_level, 1);
}
}