this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: unify single-level and multi-level compressor selection

+20 -23
+20 -23
src/main.rs
··· 86 86 let file_name = filename.file_name()?.to_str()?; 87 87 let parts: Vec<&str> = file_name.split('.').collect(); 88 88 89 - // Try multi-level detection (e.g., "archive.tar.gz" → [tar, gzip]) 90 - if parts.len() >= 3 { 91 - // Extensions right-to-left, e.g., ["gz", "tar"] 92 - let extensions: Vec<&str> = parts[1..].iter().rev().copied().collect(); 89 + if parts.len() < 2 { 90 + return None; 91 + } 93 92 94 - // Resolve each extension to a compressor name 95 - let mut compressor_names: Vec<String> = Vec::new(); 96 - for ext in &extensions { 97 - if let Some(c) = backends::compressor_from_str(ext) { 98 - compressor_names.push(c.name().to_string()); 99 - } else { 100 - compressor_names.clear(); 101 - break; 102 - } 93 + // Scan extensions right-to-left, collecting known compressors 94 + // until hitting an unknown extension or the base name. 95 + // e.g., "a.b.tar.gz" → gz ✓, tar ✓, b ✗ stop → [gz, tar] 96 + let mut compressor_names: Vec<String> = Vec::new(); 97 + for ext in parts[1..].iter().rev() { 98 + if let Some(c) = backends::compressor_from_str(ext) { 99 + compressor_names.push(c.name().to_string()); 100 + } else { 101 + break; 103 102 } 103 + } 104 104 105 - if compressor_names.len() > 1 { 106 - // Reverse to innermost-to-outermost order for MultiLevelCompressor 107 - compressor_names.reverse(); 108 - if let Ok(multi) = MultiLevelCompressor::from_names(&compressor_names) { 109 - return Some(Box::new(multi)); 110 - } 111 - } 105 + if compressor_names.is_empty() { 106 + return None; 112 107 } 113 108 114 - // Single extension fallback 115 - let ext = parts.last()?; 116 - backends::compressor_from_str(ext) 109 + // Reverse to innermost-to-outermost order 110 + compressor_names.reverse(); 111 + MultiLevelCompressor::from_names(&compressor_names) 112 + .ok() 113 + .map(|m| Box::new(m) as Box<dyn Compressor>) 117 114 } 118 115 119 116 /// Convert an input path into a Path