aboutsummaryrefslogtreecommitdiff
path: root/lib/std/compress.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/compress.zig')
-rw-r--r--lib/std/compress.zig30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/std/compress.zig b/lib/std/compress.zig
index 7fa25175d5..3c52002cfc 100644
--- a/lib/std/compress.zig
+++ b/lib/std/compress.zig
@@ -4,6 +4,36 @@ pub const deflate = @import("compress/deflate.zig");
pub const gzip = @import("compress/gzip.zig");
pub const zlib = @import("compress/zlib.zig");
+pub fn HashedReader(
+ comptime ReaderType: anytype,
+ comptime HasherType: anytype,
+) type {
+ return struct {
+ child_reader: ReaderType,
+ hasher: HasherType,
+
+ pub const Error = ReaderType.Error;
+ pub const Reader = std.io.Reader(*@This(), Error, read);
+
+ pub fn read(self: *@This(), buf: []u8) Error!usize {
+ const amt = try self.child_reader.read(buf);
+ self.hasher.update(buf);
+ return amt;
+ }
+
+ pub fn reader(self: *@This()) Reader {
+ return .{ .context = self };
+ }
+ };
+}
+
+pub fn hashedReader(
+ reader: anytype,
+ hasher: anytype,
+) HashedReader(@TypeOf(reader), @TypeOf(hasher)) {
+ return .{ .child_reader = reader, .hasher = hasher };
+}
+
test {
_ = deflate;
_ = gzip;