diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-07-10 19:20:26 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-07-14 00:14:21 -0700 |
| commit | 093fe02b75a4a28f7faecea63ce2ae9639ef5b66 (patch) | |
| tree | e1db18d9f8ff5d7bd9ed69a7958f6bf49c2c6253 /lib/std/Io.zig | |
| parent | 96a4e9b866ee899fcae164693a47b68d18f56257 (diff) | |
| download | zig-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.zig | 26 |
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; + }; + } + }; }; } |
