aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Io.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-07-10 19:20:26 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-07-14 00:14:21 -0700
commit093fe02b75a4a28f7faecea63ce2ae9639ef5b66 (patch)
treee1db18d9f8ff5d7bd9ed69a7958f6bf49c2c6253 /lib/std/Io.zig
parent96a4e9b866ee899fcae164693a47b68d18f56257 (diff)
downloadzig-093fe02b75a4a28f7faecea63ce2ae9639ef5b66.tar.gz
zig-093fe02b75a4a28f7faecea63ce2ae9639ef5b66.zip
add adaptToNewApi to std.Io.Reader as well
Diffstat (limited to 'lib/std/Io.zig')
-rw-r--r--lib/std/Io.zig26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/std/Io.zig b/lib/std/Io.zig
index a2263825d7..ad56bfb1e4 100644
--- a/lib/std/Io.zig
+++ b/lib/std/Io.zig
@@ -312,6 +312,32 @@ pub fn GenericReader(
const ptr: *const Context = @alignCast(@ptrCast(context));
return readFn(ptr.*, buffer);
}
+
+ /// Helper for bridging to the new `Reader` API while upgrading.
+ pub fn adaptToNewApi(self: *const Self) Adapter {
+ return .{
+ .derp_reader = self.*,
+ .new_interface = .{
+ .buffer = &.{},
+ .vtable = &.{ .stream = Adapter.stream },
+ },
+ };
+ }
+
+ pub const Adapter = struct {
+ derp_reader: Self,
+ new_interface: Reader,
+ err: ?Error = null,
+
+ fn stream(r: *Reader, w: *Writer, limit: Limit) Reader.StreamError!usize {
+ const a: *@This() = @fieldParentPtr("new_interface", r);
+ const buf = limit.slice(try w.writableSliceGreedy(1));
+ return a.derp_reader.read(buf) catch |err| {
+ a.err = err;
+ return error.ReadFailed;
+ };
+ }
+ };
};
}