From 49853458ceb1e9416a21c01da6daa9c1cd2c403a Mon Sep 17 00:00:00 2001 From: MrBounty Date: Sat, 19 Oct 2024 18:12:16 +0200 Subject: [PATCH] Fixed the json output for GRAB --- src/fileEngine.zig | 31 +++++++++++++++++++++++++------ src/stuffs/additionalData.zig | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/fileEngine.zig b/src/fileEngine.zig index 315436a..a2502f6 100644 --- a/src/fileEngine.zig +++ b/src/fileEngine.zig @@ -242,7 +242,7 @@ pub const FileEngine = struct { var file = std.fs.cwd().openFile(path_buff, .{}) catch return FileEngineError.CantOpenFile; defer file.close(); - var output: [BUFFER_SIZE]u8 = undefined; // Maybe need to increase that as it limit the size of a line in a file + var output: [BUFFER_SIZE]u8 = undefined; var output_fbs = std.io.fixedBufferStream(&output); const writer = output_fbs.writer(); @@ -301,14 +301,18 @@ pub const FileEngine = struct { if (!founded) continue; + // Maybe do a JSON writer wrapper out_writer.writeAll("{") catch return FileEngineError.WriteError; out_writer.writeAll("id:\"") catch return FileEngineError.WriteError; out_writer.print("{s}", .{output_fbs.getWritten()[0..36]}) catch return FileEngineError.WriteError; out_writer.writeAll("\", ") catch return FileEngineError.WriteError; for (try self.structName2structMembers(struct_name), try self.structName2DataType(struct_name)) |member_name, member_type| { + std.debug.print("Member name to send: {s}\n", .{self.locToSlice(member_name)}); + std.debug.print("Additional data: {d}\n", .{additional_data.member_to_find.items.len}); + token = data_toker.next(); // FIXME: When relationship will be implemented, need to check if the len of NON link is 0 - if (!(additional_data.member_to_find.items.len == 0) or !(additional_data.contains(self.locToSlice(member_name)))) continue; + if (!(additional_data.member_to_find.items.len == 0 or additional_data.contains(self.locToSlice(member_name)))) continue; // write the member name and = sign out_writer.print("{s}: ", .{self.locToSlice(member_name)}) catch return FileEngineError.WriteError; @@ -318,21 +322,36 @@ pub const FileEngine = struct { const str_slice = data_toker.getTokenSlice(token); out_writer.print("\"{s}\"", .{str_slice[1 .. str_slice.len - 1]}) catch return FileEngineError.WriteError; }, + .date, .time, .datetime => { + const str_slice = data_toker.getTokenSlice(token); + out_writer.print("\"{s}\"", .{str_slice}) catch return FileEngineError.WriteError; + }, .str_array => { out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; token = data_toker.next(); while (token.tag != .r_bracket) : (token = data_toker.next()) { out_writer.writeAll("\"") catch return FileEngineError.WriteError; out_writer.writeAll(data_toker.getTokenSlice(token)[1..(token.loc.end - token.loc.start)]) catch return FileEngineError.WriteError; - out_writer.writeAll("\"") catch return FileEngineError.WriteError; - out_writer.writeAll(" ") catch return FileEngineError.WriteError; + out_writer.writeAll("\", ") catch return FileEngineError.WriteError; } out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; }, - .int_array, .float_array, .bool_array, .id_array, .date_array, .time_array, .datetime_array => { + .date_array, .time_array, .datetime_array => { + out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; + token = data_toker.next(); + while (token.tag != .r_bracket) : (token = data_toker.next()) { + out_writer.writeAll("\"") catch return FileEngineError.WriteError; + out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; + out_writer.writeAll("\", ") catch return FileEngineError.WriteError; + } + out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; + }, + .int_array, .float_array, .bool_array, .id_array => { + out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; + token = data_toker.next(); while (token.tag != .r_bracket) : (token = data_toker.next()) { out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; - out_writer.writeAll(" ") catch return FileEngineError.WriteError; + out_writer.writeAll(", ") catch return FileEngineError.WriteError; } out_writer.writeAll(data_toker.getTokenSlice(token)) catch return FileEngineError.WriteError; }, diff --git a/src/stuffs/additionalData.zig b/src/stuffs/additionalData.zig index 28ced75..b37d2ad 100644 --- a/src/stuffs/additionalData.zig +++ b/src/stuffs/additionalData.zig @@ -30,7 +30,7 @@ pub const AdditionalData = struct { // This is name in: [name] // There is an additional data because it can be [friend [1; name]] pub const AdditionalDataMember = struct { - name: []const u8, + name: []const u8, // Use loc additional_data: AdditionalData, pub fn init(allocator: Allocator, name: []const u8) AdditionalDataMember {