diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-09-15 11:09:26 +0200 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-09-16 03:32:51 +0200 |
| commit | a88439202868a90745fa56f489ac698bbda73c45 (patch) | |
| tree | c6d3c95b8368416f57aa969ed6bc17f307d5bec2 /zig-structs | |
| parent | de86427e3f33086751b74892f16b3907d4aebea6 (diff) | |
| download | probe-a88439202868a90745fa56f489ac698bbda73c45.tar.gz | |
Added Zig and structs with JSON parsing
Diffstat (limited to 'zig-structs')
| -rw-r--r-- | zig-structs/Makefile | 7 | ||||
| -rw-r--r-- | zig-structs/player.json | 1 | ||||
| -rw-r--r-- | zig-structs/player.zig | 6 | ||||
| -rw-r--r-- | zig-structs/read.zig | 23 | ||||
| -rw-r--r-- | zig-structs/write.zig | 19 |
5 files changed, 56 insertions, 0 deletions
diff --git a/zig-structs/Makefile b/zig-structs/Makefile new file mode 100644 index 0000000..9afb087 --- /dev/null +++ b/zig-structs/Makefile | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | default: write read | ||
| 2 | |||
| 3 | write: | ||
| 4 | zig run write.zig | ||
| 5 | |||
| 6 | read: | ||
| 7 | zig run read.zig | ||
diff --git a/zig-structs/player.json b/zig-structs/player.json new file mode 100644 index 0000000..16cdeb6 --- /dev/null +++ b/zig-structs/player.json | |||
| @@ -0,0 +1 @@ | |||
| {"name":"Johnny Blaze","age":34} \ No newline at end of file | |||
diff --git a/zig-structs/player.zig b/zig-structs/player.zig new file mode 100644 index 0000000..6cbd354 --- /dev/null +++ b/zig-structs/player.zig | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | const std = @import("std"); | ||
| 2 | |||
| 3 | pub const Player = struct { | ||
| 4 | name: []const u8, | ||
| 5 | age: u8, | ||
| 6 | }; | ||
diff --git a/zig-structs/read.zig b/zig-structs/read.zig new file mode 100644 index 0000000..95d6390 --- /dev/null +++ b/zig-structs/read.zig | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | const std = @import("std"); | ||
| 2 | const player = @import("player.zig"); | ||
| 3 | |||
| 4 | pub fn main() !void { | ||
| 5 | var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||
| 6 | const allocator = gpa.allocator(); | ||
| 7 | defer { | ||
| 8 | _ = gpa.deinit(); | ||
| 9 | } | ||
| 10 | |||
| 11 | const file = try std.fs.cwd().openFile("player.json", .{}); | ||
| 12 | defer file.close(); | ||
| 13 | |||
| 14 | const stat = try file.stat(); | ||
| 15 | const buffer = try file.readToEndAlloc(allocator, stat.size); | ||
| 16 | defer allocator.free(buffer); | ||
| 17 | |||
| 18 | const parsed = try std.json.parseFromSlice(player.Player, allocator, buffer, .{}); | ||
| 19 | defer parsed.deinit(); | ||
| 20 | |||
| 21 | const p: player.Player = parsed.value; | ||
| 22 | std.debug.print("Reading player with data: {{ Name: {s}, Age: {d} }}\n", .{ p.name, p.age }); | ||
| 23 | } | ||
diff --git a/zig-structs/write.zig b/zig-structs/write.zig new file mode 100644 index 0000000..9f58489 --- /dev/null +++ b/zig-structs/write.zig | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | const std = @import("std"); | ||
| 2 | const player = @import("player.zig"); | ||
| 3 | |||
| 4 | pub fn main() !void { | ||
| 5 | const p = player.Player{ | ||
| 6 | .name = "Johnny Blaze", | ||
| 7 | .age = 34, | ||
| 8 | }; | ||
| 9 | |||
| 10 | std.debug.print("Writting player with data: {{ Name: {s}, Age: {d} }}\n", .{ p.name, p.age }); | ||
| 11 | |||
| 12 | var playerJSON = try std.json.stringifyAlloc(std.heap.page_allocator, p, .{}); | ||
| 13 | defer std.heap.page_allocator.free(playerJSON); | ||
| 14 | |||
| 15 | var file = try std.fs.cwd().createFile("player.json", .{}); | ||
| 16 | defer file.close(); | ||
| 17 | |||
| 18 | _ = try file.writeAll(playerJSON); | ||
| 19 | } | ||
