From c7cd286be9d4ede3129a309e2668686be4646f07 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Thu, 19 Sep 2024 14:01:34 +0200 Subject: Added saving of struct to file in Zig and reading it back --- zig-struct-json/Makefile | 7 +++++++ zig-struct-json/player.json | 1 + zig-struct-json/player.zig | 6 ++++++ zig-struct-json/read.zig | 23 +++++++++++++++++++++++ zig-struct-json/write.zig | 19 +++++++++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 zig-struct-json/Makefile create mode 100644 zig-struct-json/player.json create mode 100644 zig-struct-json/player.zig create mode 100644 zig-struct-json/read.zig create mode 100644 zig-struct-json/write.zig (limited to 'zig-struct-json') diff --git a/zig-struct-json/Makefile b/zig-struct-json/Makefile new file mode 100644 index 0000000..9afb087 --- /dev/null +++ b/zig-struct-json/Makefile @@ -0,0 +1,7 @@ +default: write read + +write: + zig run write.zig + +read: + zig run read.zig diff --git a/zig-struct-json/player.json b/zig-struct-json/player.json new file mode 100644 index 0000000..16cdeb6 --- /dev/null +++ b/zig-struct-json/player.json @@ -0,0 +1 @@ +{"name":"Johnny Blaze","age":34} \ No newline at end of file diff --git a/zig-struct-json/player.zig b/zig-struct-json/player.zig new file mode 100644 index 0000000..6cbd354 --- /dev/null +++ b/zig-struct-json/player.zig @@ -0,0 +1,6 @@ +const std = @import("std"); + +pub const Player = struct { + name: []const u8, + age: u8, +}; diff --git a/zig-struct-json/read.zig b/zig-struct-json/read.zig new file mode 100644 index 0000000..95d6390 --- /dev/null +++ b/zig-struct-json/read.zig @@ -0,0 +1,23 @@ +const std = @import("std"); +const player = @import("player.zig"); + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + const allocator = gpa.allocator(); + defer { + _ = gpa.deinit(); + } + + const file = try std.fs.cwd().openFile("player.json", .{}); + defer file.close(); + + const stat = try file.stat(); + const buffer = try file.readToEndAlloc(allocator, stat.size); + defer allocator.free(buffer); + + const parsed = try std.json.parseFromSlice(player.Player, allocator, buffer, .{}); + defer parsed.deinit(); + + const p: player.Player = parsed.value; + std.debug.print("Reading player with data: {{ Name: {s}, Age: {d} }}\n", .{ p.name, p.age }); +} diff --git a/zig-struct-json/write.zig b/zig-struct-json/write.zig new file mode 100644 index 0000000..9f58489 --- /dev/null +++ b/zig-struct-json/write.zig @@ -0,0 +1,19 @@ +const std = @import("std"); +const player = @import("player.zig"); + +pub fn main() !void { + const p = player.Player{ + .name = "Johnny Blaze", + .age = 34, + }; + + std.debug.print("Writting player with data: {{ Name: {s}, Age: {d} }}\n", .{ p.name, p.age }); + + var playerJSON = try std.json.stringifyAlloc(std.heap.page_allocator, p, .{}); + defer std.heap.page_allocator.free(playerJSON); + + var file = try std.fs.cwd().createFile("player.json", .{}); + defer file.close(); + + _ = try file.writeAll(playerJSON); +} -- cgit v1.2.3