aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/std/Io.zig2
-rw-r--r--lib/std/Io/DeprecatedReader.zig28
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/std/Io.zig b/lib/std/Io.zig
index d1efb3cbc2..ff6966d7f7 100644
--- a/lib/std/Io.zig
+++ b/lib/std/Io.zig
@@ -320,6 +320,8 @@ pub fn GenericReader(
.new_interface = .{
.buffer = &.{},
.vtable = &.{ .stream = Adapter.stream },
+ .seek = 0,
+ .end = 0,
},
};
}
diff --git a/lib/std/Io/DeprecatedReader.zig b/lib/std/Io/DeprecatedReader.zig
index 3f2429c3ae..f6cb9f61d5 100644
--- a/lib/std/Io/DeprecatedReader.zig
+++ b/lib/std/Io/DeprecatedReader.zig
@@ -372,6 +372,34 @@ pub fn discard(self: Self) anyerror!u64 {
}
}
+/// 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 },
+ .seek = 0,
+ .end = 0,
+ },
+ };
+}
+
+pub const Adapter = struct {
+ derp_reader: Self,
+ new_interface: std.io.Reader,
+ err: ?Error = null,
+
+ fn stream(r: *std.io.Reader, w: *std.io.Writer, limit: std.io.Limit) std.io.Reader.StreamError!usize {
+ const a: *@This() = @alignCast(@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;
+ };
+ }
+};
+
const std = @import("../std.zig");
const Self = @This();
const math = std.math;