authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2022-03-06 16:06:42 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2022-03-06 16:06:42 -08:00
logb84b5b55b06a5117e03acee33ed40b7b90a1fe1c
tree3a29a2bc0f3a48cbe620fc22a8cfed9c78e45e07
parent0637df01d2a87c2b019f8f794ba6625119714515

cmd/zpm- update to new zpm json api


3 files changed, 50 insertions(+), 35 deletions(-)

src/cmd/zpm.zig+46-2
......@@ -21,10 +21,12 @@ pub const server_root = "https://zig.pm/api";
2121pub const Package = struct {
2222 author: string,
2323 name: string,
24 tags: []string,
24 tags: []const string,
2525 git: string,
26 root_file: ?string,
26 root_file: string,
2727 description: string,
28 source: u32,
29 links: []const ?string,
2830};
2931
3032pub fn execute(args: [][]u8) !void {
......@@ -62,3 +64,45 @@ pub fn server_fetch(url: string) !json.Value {
6264 const val = try json.parse(gpa, body_content);
6365 return val;
6466}
67
68pub fn server_fetchArray(url: string) ![]const Package {
69 const val = try server_fetch(url);
70 var list = std.ArrayList(Package).init(gpa);
71 errdefer list.deinit();
72
73 for (val.Array) |item| {
74 if (item.getT("root_file", .String) == null) continue;
75 try list.append(Package{
76 .name = item.getT("name", .String).?,
77 .author = item.getT("author", .String).?,
78 .description = item.getT("description", .String).?,
79 .tags = try valueStrArray(item.getT("tags", .Array).?),
80 .git = item.getT("git", .String).?,
81 .root_file = item.getT("root_file", .String).?,
82 .source = @intCast(u32, item.getT("source", .Int).?),
83 .links = try valueLinks(item.get("links").?),
84 });
85 }
86 return list.toOwnedSlice();
87}
88
89fn valueStrArray(vals: []json.Value) ![]string {
90 var list = std.ArrayList(string).init(gpa);
91 errdefer list.deinit();
92
93 for (vals) |item| {
94 if (item != .String) continue;
95 try list.append(item.String);
96 }
97 return list.toOwnedSlice();
98}
99
100fn valueLinks(vals: json.Value) ![]?string {
101 var list = std.ArrayList(?string).init(gpa);
102 errdefer list.deinit();
103
104 try list.append(vals.getT("github", .String));
105 try list.append(vals.getT("aquila", .String));
106 try list.append(vals.getT("astrolabe", .String));
107 return list.toOwnedSlice();
108}
src/cmd/zpm/add.zig+3-14
......@@ -10,17 +10,8 @@ const zpm = @import("./../zpm.zig");
1010//
1111
1212pub fn execute(args: [][]u8) !void {
13 const url = "https://zpm.random-projects.net/api/packages";
14
15 const req = try zfetch.Request.init(gpa, url, null);
16 defer req.deinit();
17
18 try req.do(.GET, null, null);
19 const r = req.reader();
20
21 const body_content = try r.readAllAlloc(gpa, std.math.maxInt(usize));
22 var stream = std.json.TokenStream.init(body_content);
23 const val = try std.json.parse([]zpm.Package, &stream, .{ .allocator = gpa });
13 const url = try std.mem.join(gpa, "/", &.{ zpm.server_root, "packages" });
14 const val = try zpm.server_fetchArray(url);
2415
2516 const found = blk: {
2617 for (val) |pkg| {
......@@ -31,8 +22,6 @@ pub fn execute(args: [][]u8) !void {
3122 u.fail("no package with name '{s}' found", .{args[0]});
3223 };
3324
34 u.assert(found.root_file != null, "package must have an entry point to be able to be added to your dependencies", .{});
35
3625 const self_module = try zigmod.ModFile.init(gpa);
3726 for (self_module.deps) |dep| {
3827 if (std.mem.eql(u8, dep.name, found.name)) {
......@@ -74,7 +63,7 @@ pub fn execute(args: [][]u8) !void {
7463 try file_w.print(" - src: git {s}\n", .{u.trim_suffix(found.git, ".git")});
7564 if (!(has_zigdotmod or has_zigmodyml)) {
7665 try file_w.print(" name: {s}\n", .{found.name});
77 try file_w.print(" main: {s}\n", .{found.root_file.?[1..]});
66 try file_w.print(" main: {s}\n", .{found.root_file[1..]});
7867 }
7968
8069 std.log.info("Successfully added package {s} by {s}", .{ found.name, found.author });
src/cmd/zpm/search.zig+1-19
......@@ -13,25 +13,7 @@ pub fn execute(args: [][]u8) !void {
1313 const out = std.io.getStdOut().writer();
1414
1515 const url = try std.mem.join(gpa, "/", &.{ zpm.server_root, "packages" });
16 const val = try zpm.server_fetch(url);
17
18 var arr = std.ArrayList(zpm.Package).init(gpa);
19 defer arr.deinit();
20
21 for (val.Array) |item| {
22 if (item.get("root_file")) |_| {} else {
23 continue;
24 }
25 try arr.append(zpm.Package{
26 .name = item.getT("name", .String).?,
27 .author = item.getT("author", .String).?,
28 .description = item.getT("description", .String).?,
29 .tags = &.{},
30 .git = "",
31 .root_file = "",
32 });
33 }
34 const list = arr.items;
16 const list = try zpm.server_fetchArray(url);
3517
3618 const name_col_width = blk: {
3719 var w: usize = 4;