diff --git a/frameworks/actix/Cargo.toml b/frameworks/actix/Cargo.toml index edfa35da..53242f67 100644 --- a/frameworks/actix/Cargo.toml +++ b/frameworks/actix/Cargo.toml @@ -12,6 +12,7 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" num_cpus = "1" rusqlite = { version = "0.31", features = ["bundled"] } +flate2 = "1" [profile.release] opt-level = 3 diff --git a/frameworks/actix/src/main.rs b/frameworks/actix/src/main.rs index 4312b1d2..87c353aa 100644 --- a/frameworks/actix/src/main.rs +++ b/frameworks/actix/src/main.rs @@ -220,10 +220,19 @@ async fn json_endpoint(state: web::Data>) -> HttpResponse { } async fn compression(state: web::Data>) -> HttpResponse { + use flate2::write::GzEncoder; + use flate2::Compression; + use std::io::Write; + + let mut encoder = GzEncoder::new(Vec::new(), Compression::fast()); + encoder.write_all(&state.json_large_cache).unwrap(); + let compressed = encoder.finish().unwrap(); + HttpResponse::Ok() .insert_header(("Content-Type", "application/json")) + .insert_header(("Content-Encoding", "gzip")) .insert_header(("Server", "actix")) - .body(state.json_large_cache.clone()) + .body(compressed) } async fn db_endpoint(req: HttpRequest, db: web::Data) -> HttpResponse {