Hi, I'm writing a text editor as a hobby project, and I want to hook it up to ZLS so whenever I save my file, it sends the file buffer to ZLS, which can then return the errors, correct syntax et c. ```pub fn runZlsOnSave(self: *ZlsIntegration, filename: []const u8, filedata: *abuf) !void {
const zls_args = [_][]const u8{"zls"};
var child = std.process.Child.init(&zls_args, self.allocator);
defer _ = child.kill() catch anyerror;
child.stdin_behavior = .Pipe;
child.stdout_behavior = .Pipe;
child.stderr_behavior = .Pipe;
try child.spawn();
if (child.stdin) |stdin| {
const stdin_writer = stdin.writer();
const initialize_request = try self.initRequest(filename);
try stdin_writer.writeAll(initialize_request);
const did_open_notification = try self.openRequest(filename, filedata.b.?);
defer self.allocator.free(did_open_notification);
try stdin_writer.writeAll(did_open_notification);
try setStatusMessage("Wrote JSON", 1);
}``` This is the write code which should make the JSON request, and there's similar read code. However I can't find much on the JSON formats, and when I asked Claude it gave me: ``` return std.fmt.allocPrint(self.allocator, "Content-Length: {d}\r\n\r\n{{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"initialize\", \"params\": {{\"processId\": null, \"rootUri\": \"file://{s}\", \"capabilities\": {{}}}}}}", .{ filename.len + 100, filename });``` which returns std_error ParseError. Can someone help me figure out how do i do the read/writes to ZLS?