diff options
Diffstat (limited to 'lib/std/compress.zig')
| -rw-r--r-- | lib/std/compress.zig | 30 |
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; |
