Add gzip middleware

This commit is contained in:
Froxcey 2024-05-29 01:00:03 +08:00 committed by Bob Farrell
parent a0faada748
commit ae44b1b21a
2 changed files with 14 additions and 0 deletions

View File

@ -2,6 +2,7 @@ const std = @import("std");
const jetzig = @import("../jetzig.zig");
pub const HtmxMiddleware = @import("middleware/HtmxMiddleware.zig");
pub const GzipMiddleware = @import("middleware/Gzip.zig");
const RouteOptions = struct {
content: ?[]const u8 = null,

View File

@ -0,0 +1,13 @@
const std = @import("std");
const jetzig = @import("jetzig");
const err_msg = "Response was not compressed due to error: {s}";
pub fn beforeResponse(request: *jetzig.http.Request, response: *jetzig.http.Response) !void {
var compressed = std.ArrayList(u8).init(request.allocator);
var reader = std.io.fixedBufferStream(response.content);
std.compress.gzip.compress(reader.reader(), compressed.writer(), .{ .level = .fast }) catch |err|
return request.server.logger.ERROR(err_msg, .{@errorName(err)});
response.headers.append("Content-Encoding", "gzip") catch |err|
return request.server.logger.ERROR(err_msg, .{@errorName(err)});
response.content = compressed.items;
}