From 99739da0169db308ecad28d99838a0f4574ae792 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Tue, 4 Jul 2023 02:37:19 +0300 Subject: Update for newest zig --- src/Installation.zig | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'src/Installation.zig') diff --git a/src/Installation.zig b/src/Installation.zig index 3ff65ea..54b870c 100644 --- a/src/Installation.zig +++ b/src/Installation.zig @@ -4,6 +4,7 @@ const xdg = @import("xdg"); const zup = @import("root"); const Allocator = std.mem.Allocator; +const ArenaAllocator = std.heap.ArenaAllocator; const Config = zup.Config; const ChildProcess = std.ChildProcess; const JsonValue = std.json.Value; @@ -84,7 +85,7 @@ pub fn getInstalledList(allocator: Allocator) !Installations { var it = zup_data_iterable.iterate(); while (try it.next()) |item| { - if (item.kind != .Directory) { + if (item.kind != .directory) { continue; } @@ -133,32 +134,35 @@ pub fn isInstalled(allocator: Allocator, name: []const u8) !bool { } pub fn getAvailableList(config: Config) !Installations { - const allocator = config.allocator; + var arena = ArenaAllocator.init(config.allocator); + defer arena.deinit(); - var json_str = try curl.easyDownload(allocator, "https://ziglang.org/download/index.json"); - defer allocator.free(json_str); + const allocator = arena.allocator(); - var parser = std.json.Parser.init(allocator, false); - defer parser.deinit(); + const json_str = try curl.easyDownload(allocator, "https://ziglang.org/download/index.json"); - var vt = try parser.parse(json_str); - defer vt.deinit(); + const parsed = try std.json.parseFromSliceLeaky( + JsonValue, + allocator, + json_str, + .{}, + ); - if (vt.root != .Object) { + if (parsed != .object) { return error.JsonSchema; } - var installations = Installations.init(allocator); - errdefer Installation.deinitMap(allocator, &installations); + var installations = Installations.init(config.allocator); + errdefer Installation.deinitMap(config.allocator, &installations); - var it = vt.root.Object.iterator(); + var it = parsed.object.iterator(); while (it.next()) |kv| { var installation_opt = try parseInstallation(config, kv.key_ptr.*, kv.value_ptr.*); if (installation_opt) |*installation| { errdefer installation.deinit(); - var name = try allocator.dupe(u8, kv.key_ptr.*); - errdefer allocator.free(name); + var name = try config.allocator.dupe(u8, kv.key_ptr.*); + errdefer config.allocator.free(name); try installations.putNoClobber(name, installation.*); } @@ -170,10 +174,10 @@ pub fn getAvailableList(config: Config) !Installations { fn parseInstallation(config: Config, name: []const u8, value: JsonValue) !?Installation { const allocator = config.allocator; - if (value != .Object) { + if (value != .object) { return error.JsonSchema; } - const map = value.Object; + const map = value.object; const url_root = url_root: { for (config.supported_targets.items) |target| { @@ -190,23 +194,23 @@ fn parseInstallation(config: Config, name: []const u8, value: JsonValue) !?Insta return null; }; - if (url_root != .Object) { + if (url_root != .object) { return error.JsonSchema; } - const url_src = url_root.Object.get("tarball") orelse { + const url_src = url_root.object.get("tarball") orelse { return error.JsonSchema; }; - if (url_src != .String) { + if (url_src != .string) { return error.JsonSchema; } - var url = try allocator.dupeZ(u8, url_src.String); + var url = try allocator.dupeZ(u8, url_src.string); errdefer allocator.free(url); const version_src = if (map.get("version")) |ver| blk: { - if (ver != .String) { + if (ver != .string) { return error.JsonSchema; } else { - break :blk ver.String; + break :blk ver.string; } } else blk: { break :blk name; -- cgit v1.2.3