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
}