Skip to content

Instantly share code, notes, and snippets.

@prongbang
Last active July 21, 2024 09:42
Show Gist options
  • Save prongbang/d88d4dc7d076a9d6132bd1fda8f4f9b0 to your computer and use it in GitHub Desktop.
Save prongbang/d88d4dc7d076a9d6132bd1fda8f4f9b0 to your computer and use it in GitHub Desktop.
use flate2::write::GzEncoder;
use flate2::Compression;
use log::info;
use std::fs::File;
use std::io::{copy, Error};
use std::io::BufReader;
use std::time::Instant;
use std::fs::File;
use std::io::{BufReader, Cursor, Read, Write};
use flate2::Compression;
use flate2::write::{GzEncoder, ZlibEncoder};
use lopdf::{Document, Object};
use zstd::stream::Encoder;
pub fn compress(input: Vec<u8>, output: String, level: u32) -> Result<u64, Error> {
let mut input = BufReader::new(input.as_slice());
let output = File::create(output)?;
let mut encoder = GzEncoder::new(output, Compression::new(level));
let start = Instant::now();
copy(&mut input, &mut encoder)?;
let output = encoder.finish()?;
let meta = output.metadata()?;
info!("Elapsed: {:?}", start.elapsed());
Ok(meta.len())
}
// Gzip
let mut encoder = GzEncoder::new(Vec::new(), Compression::best());
encoder.write_all(stream.content.as_slice())?;
let compressed = encoder.finish()?;
// Zlib
let mut encoder = ZlibEncoder::new(Vec::new(), Compression::best());
encoder.write_all(stream.content.as_slice())?;
let compressed = encoder.finish()?;
// Zstd
let mut encoder = Encoder::new(Vec::new(), level)?;
encoder.write_all(stream.content.as_slice())?;
let compressed = encoder.finish()?;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment