feat: add native zstd compression plugin and deduplicate shared compression/meta utilities
- Add zstd crate (v0.13) with native Rust compression engine (level 3) - Gate behind 'zstd' feature flag, fall back to program-based when disabled - Extract CompressionService::decompressing_reader/compressing_writer with zstd support - Extract MetaService::with_collector() to eliminate Arc<Mutex<Vec>> boilerplate - Extract read_with_bounds() helper for skip+read pattern - Add input validation for mutually exclusive --id and --tags flags - Add zstd round-trip tests
This commit is contained in:
@@ -3,6 +3,7 @@ use crate::compression_engine::CompressionType;
|
||||
use crate::config::Settings;
|
||||
use crate::meta_plugin::SaveMetaFn;
|
||||
use crate::modes::common::settings_compression_type;
|
||||
use crate::services::compression_service::CompressionService;
|
||||
use crate::services::meta_service::MetaService;
|
||||
use anyhow::Result;
|
||||
use clap::Command;
|
||||
@@ -73,15 +74,8 @@ pub fn mode(
|
||||
meta_service.initialize_plugins(&mut plugins);
|
||||
|
||||
// Wrap pipe writer with appropriate compression
|
||||
let mut compressor: Box<dyn Write> = match compression_type_clone {
|
||||
CompressionType::GZip => {
|
||||
use flate2::Compression;
|
||||
use flate2::write::GzEncoder;
|
||||
Box::new(GzEncoder::new(pipe_writer, Compression::default()))
|
||||
}
|
||||
CompressionType::LZ4 => Box::new(lz4_flex::frame::FrameEncoder::new(pipe_writer)),
|
||||
_ => Box::new(pipe_writer),
|
||||
};
|
||||
let mut compressor: Box<dyn Write> =
|
||||
CompressionService::compressing_writer(Box::new(pipe_writer), &compression_type_clone);
|
||||
|
||||
loop {
|
||||
let n = stdin_lock.read(&mut buffer)?;
|
||||
|
||||
Reference in New Issue
Block a user