@@ -76,20 +76,18 @@ pub const io = struct {
7676 }
7777};
7878
79- // A type satisfying the Reader interface (uses default ReadError)
80- const FixedBufferReader = struct {
81- buffer: []const u8,
82- pos: usize = 0,
83-
84- pub fn read(self: *@This(), out_buffer: []u8) error{}!usize {
85- const len = @min(self.buffer[self.pos..].len, out_buffer.len);
86- @memcpy(out_buffer[0..len], self.buffer[self.pos..][0..len]);
87- self.pos += len;
88- return len;
89- }
90- };
91-
9279test "use FixedBufferReader as a reader" {
80+ const FixedBufferReader = struct {
81+ buffer: []const u8,
82+ pos: usize = 0,
83+
84+ pub fn read(self: *@This(), out_buffer: []u8) error{}!usize {
85+ const len = @min(self.buffer[self.pos..].len, out_buffer.len);
86+ @memcpy(out_buffer[0..len], self.buffer[self.pos..][0..len]);
87+ self.pos += len;
88+ return len;
89+ }
90+ };
9391 const in_buf: []const u8 = "I really hope that this works!";
9492 var reader = FixedBufferReader{ .buffer = in_buf };
9593
@@ -106,6 +104,18 @@ test "use std.File as a reader" {
106104
107105 try std.testing.expectEqualStrings("Hello, I am a file!", &buffer);
108106}
107+
108+ test "use std.os.fd_t as a reader with an explicit interface" {
109+ var buffer: [19]u8 = undefined;
110+ var file = try std.os.open("my_file.txt", std.os.O.RDONLY, 0);
111+ try io.readAll(
112+ file,
113+ .{ .read = std.os.read, .ReadError = std.os.ReadError, },
114+ &buffer,
115+ );
116+
117+ try std.testing.expectEqualStrings("Hello, I am a file!", &buffer);
118+ }
109119```
110120
111121More in-depth [ examples] [ 4 ] are provided.
0 commit comments