【Rust】gzip圧縮されたテキストファイルの読込み・書込み

flate2を使ってgzip圧縮されたテキストファイルの読込みと書込みを行います。

[package]
name = "gzip-sample"
version = "0.1.0"
edition = "2021"

[dependencies]
flate2 = "1.0.35"
use std::{
    error::Error,
    fs::File,
    io::{BufRead, BufReader, BufWriter, Write},
};

use flate2::{bufread::MultiGzDecoder, write::GzEncoder, Compression};

fn main() -> Result<(), Box<dyn Error>> {
    //ファイルを読み込む
    let input_file = File::open("uuid_lower.txt.gz")?;
    let reader = BufReader::new(input_file);
    let decoder = MultiGzDecoder::new(reader);
    let reader = BufReader::new(decoder);

    //一行ごとに読み込みながら大文字に変換する
    let mut upper_uuids = Vec::new();
    for result in reader.lines() {
        let line = result?;
        upper_uuids.push(line.to_uppercase());
    }

    //ファイルに書き込む
    let output_file = File::create("uuid_upper.txt.gz")?;
    let writer = BufWriter::new(output_file);
    let encoder = GzEncoder::new(writer, Compression::default());
    let mut writer = BufWriter::new(encoder);

    for uuid in upper_uuids.iter() {
        let line = format!("{}\n", uuid);
        writer.write(line.as_bytes())?;
    }

    Ok(())
}

uuid_lower.txt.gzには100万件のUUID文字列が入っています。
各UUIDを大文字に変換してuuid_upper.txt.gzに出力する処理を行っています。