1const std = @import("std");
2const gpa = std.heap.c_allocator;
3const extras = @import("extras");
4const nfs = @import("nfs");
5
6const zpm = @import("./../zpm.zig");
7
8//
9//
10
11pub fn execute(self_name: []const u8, args: []const [:0]const u8) !void {
12 _ = self_name;
13 _ = args;
14
15 const out = nfs.stdout();
16
17 const url = try std.mem.join(gpa, "/", &.{ zpm.server_root, "packages" });
18 const list = try zpm.server_fetchArray(url);
19
20 const name_col_width = blk: {
21 var w: usize = 4;
22 for (list) |pkg| {
23 const len = pkg.name.len;
24 if (len > w) {
25 w = len;
26 }
27 }
28 break :blk w + 2;
29 };
30
31 const author_col_width = blk: {
32 var w: usize = 6;
33 for (list) |pkg| {
34 const len = pkg.author.len;
35 if (len > w) {
36 w = len;
37 }
38 }
39 break :blk w + 2;
40 };
41
42 try out.writeAll("NAME");
43 try print_c_n(out, ' ', name_col_width - 4);
44 try out.writeAll("AUTHOR");
45 try print_c_n(out, ' ', author_col_width - 6);
46 try out.writeAll("DESCRIPTION\n");
47
48 for (list) |pkg| {
49 try out.writeAll(pkg.name);
50 try print_c_n(out, ' ', name_col_width - pkg.name.len);
51
52 try out.writeAll(pkg.author);
53 try print_c_n(out, ' ', author_col_width - pkg.author.len);
54
55 try out.writeAll(pkg.description);
56 try out.writeAll("\n");
57 }
58}
59
60fn print_c_n(out: anytype, c: u8, n: usize) !void {
61 for (0..n) |_| {
62 try out.writeAll(&.{c});
63 }
64}