summaryrefslogtreecommitdiff
path: root/zig-struct-json
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2024-09-19 14:01:34 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2024-09-19 14:01:34 +0200
commitc7cd286be9d4ede3129a309e2668686be4646f07 (patch)
tree98e0767894d7fc816a37dca55ec73bafddc1bee5 /zig-struct-json
parent1be35411cf23c1b8cc909c2f2e1d1030e2f5015a (diff)
downloadprobe-c7cd286be9d4ede3129a309e2668686be4646f07.tar.gz
Added saving of struct to file in Zig and reading it back
Diffstat (limited to 'zig-struct-json')
-rw-r--r--zig-struct-json/Makefile7
-rw-r--r--zig-struct-json/player.json1
-rw-r--r--zig-struct-json/player.zig6
-rw-r--r--zig-struct-json/read.zig23
-rw-r--r--zig-struct-json/write.zig19
5 files changed, 56 insertions, 0 deletions
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);
+}