i was trying to make an Io.Writer implementation but when i pass a buffer, drain gets called with an empty slice. i tried to make a minimum example
pub fn writer(buffer: []u8) Writer {
return .{
.interface = Io.Writer{
.buffer = buffer,
.vtable = &.{ .drain = Writer.drain },
},
};
}
pub const Writer = struct {
interface: Io.Writer,
fn drain(_: *Io.Writer, data: []const []const u8, _: usize) !usize {
std.debug.print("data.len = {d}, data[0].len = {d}\n", .{ data.len, data[0].len });
return data[0].len;
}
};
with buffer:
var buffer: [1024]u8 = undefined;
var writer = writer(&buffer);
try writer.interface.writeAll("meow?");
try writer.interface.flush();
i get
data.len = 1, data[0].len = 0
data.len = 1, data[0].len = 0
... repeated
but if i pass empty array as buffer it works fine, data[0].len is > 0. what am i doing wrong here? probably something stupid