authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-10 19:20:26-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-14 00:14:21-07:00
log093fe02b75a4a28f7faecea63ce2ae9639ef5b66
treee1db18d9f8ff5d7bd9ed69a7958f6bf49c2c6253
parent96a4e9b866ee899fcae164693a47b68d18f56257

add adaptToNewApi to std.Io.Reader as well


1 files changed, 26 insertions(+), 0 deletions(-)

lib/std/Io.zig+26
......@@ -312,6 +312,32 @@ pub fn GenericReader(
312312 const ptr: *const Context = @alignCast(@ptrCast(context));
313313 return readFn(ptr.*, buffer);
314314 }
315
316 /// Helper for bridging to the new `Reader` API while upgrading.
317 pub fn adaptToNewApi(self: *const Self) Adapter {
318 return .{
319 .derp_reader = self.*,
320 .new_interface = .{
321 .buffer = &.{},
322 .vtable = &.{ .stream = Adapter.stream },
323 },
324 };
325 }
326
327 pub const Adapter = struct {
328 derp_reader: Self,
329 new_interface: Reader,
330 err: ?Error = null,
331
332 fn stream(r: *Reader, w: *Writer, limit: Limit) Reader.StreamError!usize {
333 const a: *@This() = @fieldParentPtr("new_interface", r);
334 const buf = limit.slice(try w.writableSliceGreedy(1));
335 return a.derp_reader.read(buf) catch |err| {
336 a.err = err;
337 return error.ReadFailed;
338 };
339 }
340 };
315341 };
316342}
317343