Skip to content

Commit 39820a0

Browse files
committed
Workaround ziglang/zig#24443
1 parent e58d398 commit 39820a0

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/lsp.zig

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,9 +1334,23 @@ pub fn ThreadSafeTransport(config: ThreadSafeTransportConfig) type {
13341334
};
13351335
}
13361336

1337-
pub fn readJsonMessage(reader: *std.io.Reader, allocator: std.mem.Allocator) (std.io.Reader.ReadAllocError || BaseProtocolHeader.ParseError)![]u8 {
1337+
pub fn readJsonMessage(
1338+
reader: *std.io.Reader,
1339+
allocator: std.mem.Allocator,
1340+
) (std.io.Reader.Error || std.mem.Allocator.Error || BaseProtocolHeader.ParseError)![]u8 {
13381341
const header: BaseProtocolHeader = try .parse(reader);
1339-
return try reader.readAlloc(allocator, header.content_length);
1342+
1343+
// Use `readAlloc` once https://github.com/ziglang/zig/issues/24443 has been resolved:
1344+
// return try reader.readAlloc(allocator, header.content_length);
1345+
1346+
const json_message = try allocator.alloc(u8, header.content_length);
1347+
errdefer allocator.free(json_message);
1348+
var writer: std.io.Writer = .fixed(json_message);
1349+
reader.streamExact(&writer, json_message.len) catch |err| switch (err) {
1350+
error.ReadFailed, error.EndOfStream => |e| return e,
1351+
error.WriteFailed => unreachable, // fixed buffer
1352+
};
1353+
return json_message;
13401354
}
13411355

13421356
test readJsonMessage {

0 commit comments

Comments
 (0)