authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-02-04 18:12:17 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-02-04 18:12:17 -08:00
logdc5a695ba985caab77db4bc568d2fc7c8f5f0c0e
tree7d7476cb32307928fe23543d7c3add1969f82fc0
parentfdb957c198a75db546675dce52c13a1bef5565a3

more Readable methods


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

nio.zig+29
......@@ -86,6 +86,35 @@ pub fn Readable(T: type, this_kind: enum { _var, _const, _bare }) type {
8686 try readAllArrayList(self, &array_list, max_size);
8787 return try array_list.toOwnedSlice();
8888 }
89
90 pub fn readArray(self: Self, comptime N: usize) ![N]u8 {
91 var buffer: [N]u8 = undefined;
92 if (try readAll(self, &buffer) != N) return error.EndOfStream;
93 return buffer;
94 }
95
96 pub fn readByte(self: Self) !u8 {
97 return (try readArray(self, 1))[0];
98 }
99
100 pub fn readUntilDelimitersBuf(self: Self, buffer: []u8, needle: []const u8) ![]u8 {
101 var real_len: usize = 0;
102 for (0..buffer.len) |_| {
103 buffer[real_len] = try readByte(self);
104 real_len += 1;
105 if (real_len < needle.len) continue;
106 if (std.mem.endsWith(u8, buffer[0..real_len], needle)) return buffer[0 .. real_len - needle.len];
107 }
108 return error.StreamTooLong;
109 }
110
111 pub fn readUntilDelimitersArrayList(self: Self, array_list: *std.ArrayList(u8), needle: []const u8, max_size: usize) !usize {
112 for (0..max_size) |i| {
113 try array_list.append(try readByte(self));
114 if (std.mem.endsWith(u8, array_list.items, needle)) return i + 1 - needle.len;
115 }
116 return error.StreamTooLong;
117 }
89118 };
90119}
91120