-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathio_writer.zig
More file actions
26 lines (21 loc) · 831 Bytes
/
io_writer.zig
File metadata and controls
26 lines (21 loc) · 831 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const std = @import("std");
const MyByteList = struct {
data: [100]u8 = undefined,
items: []u8 = &[_]u8{},
const Writer = std.io.Writer(*MyByteList, error{EndOfBuffer}, appendWrite);
fn appendWrite(self: *MyByteList, data: []const u8) error{EndOfBuffer}!usize {
if (self.items.len + data.len > self.data.len) return error.EndOfBuffer;
@memcpy(self.data[self.items.len..][0..data.len], data);
self.items = self.data[0 .. self.items.len + data.len];
return data.len;
}
fn writer(self: *MyByteList) Writer {
return .{ .context = self };
}
};
test "custom writer" {
var bytes = MyByteList{};
_ = try bytes.writer().write("Hello");
_ = try bytes.writer().write(" Writer!");
try std.testing.expect(std.mem.eql(u8, bytes.items, "Hello Writer!"));
}