Compare commits

...

1 Commits

Author SHA1 Message Date
Nick Rolfe
e287e4b316 Ruby: compress TRAP with Brotli 2022-07-29 19:52:10 +01:00
3 changed files with 16 additions and 3 deletions

BIN
ruby/Cargo.lock generated

Binary file not shown.

View File

@@ -20,3 +20,4 @@ num_cpus = "1.13.0"
regex = "1.5.5" regex = "1.5.5"
encoding = "0.2" encoding = "0.2"
lazy_static = "1.4.0" lazy_static = "1.4.0"
brotli = "3.3.4"

View File

@@ -71,6 +71,15 @@ impl Writer {
let mut trap_file = BufWriter::new(trap_file); let mut trap_file = BufWriter::new(trap_file);
self.write_trap_entries(&mut trap_file) self.write_trap_entries(&mut trap_file)
} }
Compression::Brotli => {
let params = brotli::enc::BrotliEncoderParams {
quality: 3,
..Default::default()
};
let trap_file = brotli::CompressorWriter::with_params(trap_file, 4096, &params);
let mut trap_file = BufWriter::new(trap_file);
self.write_trap_entries(&mut trap_file)
}
} }
} }
@@ -221,6 +230,7 @@ fn limit_string(string: &str, max_size: usize) -> &str {
pub enum Compression { pub enum Compression {
None, None,
Gzip, Gzip,
Brotli,
} }
impl Compression { impl Compression {
@@ -229,12 +239,12 @@ impl Compression {
Ok(method) => match Compression::from_string(&method) { Ok(method) => match Compression::from_string(&method) {
Some(c) => c, Some(c) => c,
None => { None => {
tracing::error!("Unknown compression method '{}'; using gzip.", &method); tracing::error!("Unknown compression method '{}'; using brotli.", &method);
Compression::Gzip Compression::Brotli
} }
}, },
// Default compression method if the env var isn't set: // Default compression method if the env var isn't set:
Err(_) => Compression::Gzip, Err(_) => Compression::Brotli,
} }
} }
@@ -242,6 +252,7 @@ impl Compression {
match s.to_lowercase().as_ref() { match s.to_lowercase().as_ref() {
"none" => Some(Compression::None), "none" => Some(Compression::None),
"gzip" => Some(Compression::Gzip), "gzip" => Some(Compression::Gzip),
"brotli" => Some(Compression::Brotli),
_ => None, _ => None,
} }
} }
@@ -250,6 +261,7 @@ impl Compression {
match self { match self {
Compression::None => "trap", Compression::None => "trap",
Compression::Gzip => "trap.gz", Compression::Gzip => "trap.gz",
Compression::Brotli => "trap.br",
} }
} }
} }