Added Zig and structs with JSON parsing
| 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) |
|
-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 | |||
| 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 | |||
| 1 | {"name":"Johnny Blaze","age":34} |
||
| diff --git a/zig-structs/player.zig b/zig-structs/player.zig | |||
| 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 | |||
| 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 | |||
| 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 | } |
||