diff --git a/src/cmd/zpm.zig b/src/cmd/zpm.zig index 4f2f7c95858083568de54770c3d2cb7ece7cb6ad..24bf376e9372c236b356b8a229e23b305cd0a478 100644 --- a/src/cmd/zpm.zig +++ b/src/cmd/zpm.zig @@ -1,6 +1,9 @@ const std = @import("std"); const gpa = std.heap.c_allocator; +const zfetch = @import("zfetch"); +const json = @import("json"); + const u = @import("./../util/index.zig"); // @@ -8,8 +11,11 @@ const u = @import("./../util/index.zig"); pub const commands = struct { pub const add = @import("./zpm_add.zig"); + pub const showjson = @import("./zpm/showjson.zig"); }; +pub const server_root = "https://zpm.random-projects.net/api"; + pub fn execute(args: [][]u8) !void { if (args.len == 0) { std.debug.warn("{s}\n", .{ @@ -32,3 +38,13 @@ pub fn execute(args: [][]u8) !void { } std.debug.panic("error: unknown command \"{s}\" for \"zigmod zpm\"", .{args[0]}); } + +pub fn server_fetch(url: []const u8) !json.Value { + const req = try zfetch.Request.init(gpa, url, null); + defer req.deinit(); + try req.do(.GET, null, null); + const r = req.reader(); + const body_content = try r.readAllAlloc(gpa, std.math.maxInt(usize)); + const val = try json.parse(gpa, body_content); + return val; +} diff --git a/src/cmd/zpm/showjson.zig b/src/cmd/zpm/showjson.zig new file mode 100644 index 0000000000000000000000000000000000000000..09e6aa0aed79402f0e4fe376ff3c4e6f19f06ae5 --- /dev/null +++ b/src/cmd/zpm/showjson.zig @@ -0,0 +1,19 @@ +const std = @import("std"); +const gpa = std.heap.c_allocator; + +const zfetch = @import("zfetch"); +const json = @import("json"); + +const u = @import("./../util/index.zig"); +const zpm = @import("./../zpm.zig"); + +// +// + +pub fn execute(args: [][]u8) !void { + const url = try std.mem.join(gpa, "/", &.{ zpm.server_root, args[0] }); + const val = try zpm.server_fetch(url); + + const out = std.io.getStdOut().writer(); + try out.print("{}\n", .{val}); +}