From 56210d17f2e3fb49e8eccf287aab1a76d09658a9 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 31 May 2026 22:21:42 -0700 Subject: [PATCH] add readUntilDelimiter --- AnyReadable.zig | 1 + buffered_reader.zig | 1 + counting_reader.zig | 1 + fixed_buffer_stream.zig | 1 + limited_reader.zig | 1 + nio.zig | 9 +++++++++ 6 files changed, 14 insertions(+) diff --git a/AnyReadable.zig b/AnyReadable.zig index ac141e0a9a0f66e6b159a52f3b7072aa76c770b6..aad745d22a1c6991ee5109a165387b0d88d45172 100644 --- a/AnyReadable.zig +++ b/AnyReadable.zig @@ -23,6 +23,7 @@ pub const readUntilDelimitersArrayList = R.readUntilDelimitersArrayList; pub const readAlloc = R.readAlloc; pub const readInt = R.readInt; pub const readUntilDelimitersAlloc = R.readUntilDelimitersAlloc; +pub const readUntilDelimiter = R.readUntilDelimiter; pub const readUntilDelimiterOrEof = R.readUntilDelimiterOrEof; pub const readExpected = R.readExpected; pub const skipBytes = R.skipBytes; diff --git a/buffered_reader.zig b/buffered_reader.zig index 2059508bb10d398aeade3fce2ed2df7eb3e25c94..190d43b55ae5601a44fd1fa30cc04c9e214e9753 100644 --- a/buffered_reader.zig +++ b/buffered_reader.zig @@ -35,6 +35,7 @@ pub fn BufferedReader(comptime buffer_size: usize, comptime ReaderType: type) ty pub const readAlloc = R.readAlloc; pub const readInt = R.readInt; pub const readUntilDelimitersAlloc = R.readUntilDelimitersAlloc; + pub const readUntilDelimiter = R.readUntilDelimiter; pub const readUntilDelimiterOrEof = R.readUntilDelimiterOrEof; pub const readExpected = R.readExpected; pub const skipBytes = R.skipBytes; diff --git a/counting_reader.zig b/counting_reader.zig index 33aa760145c94a28d391ce8699deb1ed56340202..7e5542ea6f68dba079ba9f8700b9765ccebe5a4e 100644 --- a/counting_reader.zig +++ b/counting_reader.zig @@ -38,6 +38,7 @@ pub fn CountingReader(ReaderType: type) type { pub const readAlloc = R.readAlloc; pub const readInt = R.readInt; pub const readUntilDelimitersAlloc = R.readUntilDelimitersAlloc; + pub const readUntilDelimiter = R.readUntilDelimiter; pub const readUntilDelimiterOrEof = R.readUntilDelimiterOrEof; pub const readExpected = R.readExpected; pub const skipBytes = R.skipBytes; diff --git a/fixed_buffer_stream.zig b/fixed_buffer_stream.zig index 98459661f838640e8ad789ea03a272bd2458f383..9e373b4ce7d43a05f0249b5726186704d964368e 100644 --- a/fixed_buffer_stream.zig +++ b/fixed_buffer_stream.zig @@ -43,6 +43,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type { pub const readAlloc = R.readAlloc; pub const readInt = R.readInt; pub const readUntilDelimitersAlloc = R.readUntilDelimitersAlloc; + pub const readUntilDelimiter = R.readUntilDelimiter; pub const readUntilDelimiterOrEof = R.readUntilDelimiterOrEof; pub const readExpected = R.readExpected; pub const skipBytes = R.skipBytes; diff --git a/limited_reader.zig b/limited_reader.zig index af8059c194c2277a03ba2fcd2b58699c4cf9df30..dfaa16ca4b564451d9cd3ab31debfac6c0063a11 100644 --- a/limited_reader.zig +++ b/limited_reader.zig @@ -38,6 +38,7 @@ pub fn LimitedReader(ReaderType: type) type { pub const readAlloc = R.readAlloc; pub const readInt = R.readInt; pub const readUntilDelimitersAlloc = R.readUntilDelimitersAlloc; + pub const readUntilDelimiter = R.readUntilDelimiter; pub const readUntilDelimiterOrEof = R.readUntilDelimiterOrEof; pub const readExpected = R.readExpected; pub const skipBytes = R.skipBytes; diff --git a/nio.zig b/nio.zig index cf49ee132ad3ec4fd7d0b679bc85f255514357c2..7b0317fc3c7f718592106c873a15feaa1d24dc14 100644 --- a/nio.zig +++ b/nio.zig @@ -182,6 +182,15 @@ pub fn Readable(T: type, this_kind: enum { _var, _const, _bare }) type { return list.toOwnedSlice(); } + pub fn readUntilDelimiter(self: Self, buf: []u8, needle: u8) ![]u8 { + for (buf, 0..) |*c, i| { + const b = try readByte(self); + c.* = b; + if (b == needle) return buf[0..i]; + } + return error.StreamTooLong; + } + /// Returned slice is not suffixed by needle but buf will contain it. pub fn readUntilDelimiterOrEof(self: Self, buf: []u8, needle: u8) !?[]u8 { for (buf, 0..) |*c, i| { -- 2.54.0