refactor: Improve compression status and engine selection logic
Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat>
This commit is contained in:
@@ -17,9 +17,6 @@ pub mod lz4;
|
||||
pub mod none;
|
||||
pub mod program;
|
||||
|
||||
use crate::compression_engine::gzip::CompressionEngineGZip;
|
||||
use crate::compression_engine::lz4::CompressionEngineLZ4;
|
||||
use crate::compression_engine::none::CompressionEngineNone;
|
||||
use crate::compression_engine::program::CompressionEngineProgram;
|
||||
|
||||
/// Enum representing different compression types supported by the system.
|
||||
@@ -113,6 +110,16 @@ pub trait CompressionEngine {
|
||||
true
|
||||
}
|
||||
|
||||
/// Gets status information for this compression engine.
|
||||
///
|
||||
/// Provides details about the binary/program used and compression/decompression commands.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// * `(binary: String, compress: String, decompress: String)` - Binary name/path,
|
||||
/// space-separated compress arguments, space-separated decompress arguments.
|
||||
fn get_status_info(&self) -> (String, String, String);
|
||||
|
||||
/// Copies decompressed content from a file to a writer.
|
||||
///
|
||||
/// Reads the compressed file and writes the decompressed content to the provided writer.
|
||||
@@ -209,12 +216,6 @@ lazy_static! {
|
||||
let program = CompressionEngineProgram::new("gzip", vec!["-c"], vec!["-d", "-c"]);
|
||||
if program.supported { Some(program) } else { None }
|
||||
},
|
||||
#[cfg(feature = "bzip2")]
|
||||
CompressionType::BZip2 => {
|
||||
let program = CompressionEngineProgram::new("bzip2", vec!["-qcf"], vec!["-dcf"]);
|
||||
if program.supported { Some(program) } else { None }
|
||||
},
|
||||
#[cfg(not(feature = "bzip2"))]
|
||||
CompressionType::BZip2 => {
|
||||
let program = CompressionEngineProgram::new("bzip2", vec!["-qcf"], vec!["-dcf"]);
|
||||
if program.supported { Some(program) } else { None }
|
||||
@@ -264,7 +265,7 @@ pub fn get_compression_engine(
|
||||
CompressionType::LZ4 => {
|
||||
#[cfg(feature = "lz4")]
|
||||
{
|
||||
Ok(Box::new(CompressionEngineLZ4::new()))
|
||||
Ok(Box::new(crate::compression_engine::lz4::CompressionEngineLZ4::new()))
|
||||
}
|
||||
#[cfg(not(feature = "lz4"))]
|
||||
{
|
||||
@@ -278,7 +279,7 @@ pub fn get_compression_engine(
|
||||
CompressionType::GZip => {
|
||||
#[cfg(feature = "gzip")]
|
||||
{
|
||||
Ok(Box::new(CompressionEngineGZip::new()))
|
||||
Ok(Box::new(crate::compression_engine::gzip::CompressionEngineGZip::new()))
|
||||
}
|
||||
#[cfg(not(feature = "gzip"))]
|
||||
{
|
||||
@@ -289,7 +290,7 @@ pub fn get_compression_engine(
|
||||
}
|
||||
}
|
||||
},
|
||||
CompressionType::None => Ok(Box::new(CompressionEngineNone::new())),
|
||||
CompressionType::None => Ok(Box::new(crate::compression_engine::none::CompressionEngineNone::new())),
|
||||
compression_type => {
|
||||
let ct = compression_type.clone();
|
||||
if let Some(engine) = COMPRESSION_PROGRAMS[ct.clone()].clone() {
|
||||
@@ -321,11 +322,12 @@ pub fn get_compression_engine(
|
||||
pub fn default_compression_type() -> CompressionType {
|
||||
let mut default = CompressionType::None;
|
||||
for compression_type in CompressionType::iter() {
|
||||
let compression_engine =
|
||||
get_compression_engine(compression_type.clone()).expect("Missing engine");
|
||||
if compression_engine.is_supported() {
|
||||
default = compression_type;
|
||||
break;
|
||||
match get_compression_engine(compression_type.clone()) {
|
||||
Ok(engine) if engine.is_supported() => {
|
||||
default = compression_type;
|
||||
break;
|
||||
}
|
||||
_ => continue,
|
||||
}
|
||||
}
|
||||
default
|
||||
|
||||
Reference in New Issue
Block a user