summaryrefslogtreecommitdiff
path: root/src/transmission.zig
diff options
context:
space:
mode:
authorChristian Segundo2023-07-24 10:28:58 +0200
committerChristian Segundo2023-07-24 10:28:58 +0200
commitf743e05e207046073999ee7234a157359d6a4f57 (patch)
tree0ceb01ffdcdc3a094e488c28e80c80d89f8309c5 /src/transmission.zig
parentb02b7f71978a172848322f0671d580e425634916 (diff)
downloadzmission-f743e05e207046073999ee7234a157359d6a4f57.tar.gz
Diffstat (limited to 'src/transmission.zig')
-rw-r--r--src/transmission.zig122
1 files changed, 78 insertions, 44 deletions
diff --git a/src/transmission.zig b/src/transmission.zig
index 9f0f5f0..239151a 100644
--- a/src/transmission.zig
+++ b/src/transmission.zig
@@ -3,8 +3,8 @@ const http = std.http;
const util = @import("util.zig");
-const Request = @import("request.zig");
-const Response = @import("response.zig");
+pub const Request = @import("request.zig");
+pub const Response = @import("response.zig").Response;
pub const ClientOptions = extern struct {
host: [*:0]const u8,
@@ -100,58 +100,92 @@ pub const Client = struct {
}
};
-pub fn session_get_raw(client: *Client, session_get: ?Request.SessionGet) ![]u8 {
- const default: Request.SessionGet = .{
- .fields = Request.SessionGet.all_fields,
- };
-
- const r = Request.Object{
- .method = .session_get,
- .arguments = .{ .session_get = session_get orelse default },
- };
- const body = try client.do(r);
- return body;
+pub fn torrentAdd(client: *Client, r: Request.TorrentAdd) !Response {
+ const body = try torrentAddRaw(client, r);
+ defer client.allocator.free(body);
+ return Response.parseBody(
+ client.allocator,
+ Request.Method.@"torrent-add",
+ body,
+ null,
+ );
}
-pub fn torrent_get_raw(client: *Client, torrent_get: ?Request.TorrentGet) ![]u8 {
- const default: Request.TorrentGet = .{
- .fields = Request.TorrentGet.all_fields,
- };
- //const default: Request.TorrentGet = .{
- //.fields = &[_]Request.TorrentGet.Fields{.name},
- //};
-
- const r = Request.Object{
- .method = .torrent_get,
- .arguments = .{ .torrent_get = torrent_get orelse default },
- };
- const body = try client.do(r);
- std.debug.print("{s}\n", .{body});
- if (1 == 1)
- @panic("");
+pub fn torrentAddRaw(client: *Client, r: Request.TorrentAdd) ![]u8 {
+ const body = try client.do(Request.Object{
+ .method = .@"torrent-add",
+ .arguments = .{ .@"torrent-add" = r },
+ });
return body;
}
-pub fn torrent_get_(client: *Client, torrent_get: ?Request.TorrentGet) !Response.Object {
- @setEvalBranchQuota(100000);
- const body = try torrent_get_raw(client, torrent_get);
- const decoded: Response.TorrentGet = try std.json.parseFromSlice(
- Response.TorrentGet,
+pub fn torrentGet(client: *Client, r: ?Request.TorrentGet) !Response {
+ const body = try torrentGetRaw(client, r);
+ defer client.allocator.free(body);
+ return Response.parseBody(
client.allocator,
+ Request.Method.@"torrent-get",
body,
- std.json.ParseOptions{
- .ignore_unknown_fields = true,
- .duplicate_field_behavior = .@"error",
- },
+ null,
);
- return Response.Object.init(.{ .torrent_get = decoded.arguments }, decoded.result);
}
-pub fn session_set_raw(client: *Client, session_set: Request.SessionSet) ![]u8 {
- const r = Request.Object{
- .method = .session_set,
- .arguments = .{ .session_set = session_set },
+pub fn torrentGetRaw(client: *Client, r: ?Request.TorrentGet) ![]u8 {
+ const request = blk: {
+ if (r == null) {
+ break :blk Request.Object{
+ .method = .@"torrent-get",
+ .arguments = .{
+ .@"torrent-get" = Request.TorrentGet{
+ .fields = Request.TorrentGet.all_fields,
+ },
+ },
+ };
+ } else {
+ break :blk Request.Object{
+ .method = .@"torrent-get",
+ .arguments = .{ .@"torrent-get" = r.? },
+ };
+ }
};
- const body = try client.do(r);
+
+ const body = try client.do(request);
return body;
}
+
+//pub fn session_get_raw(client: *Client, session_get: ?Request.SessionGet) ![]u8 {
+//const default: Request.SessionGet = .{
+//.fields = Request.SessionGet.all_fields,
+//};
+
+//const r = Request.Object{
+//.method = .session_get,
+//.arguments = .{ .session_get = session_get orelse default },
+//};
+//const body = try client.do(r);
+//return body;
+//}
+
+//pub fn torrent_get_(client: *Client, torrent_get: ?Request.TorrentGet) !Response.Object {
+//@setEvalBranchQuota(100000);
+//const body = try torrent_get_raw(client, torrent_get);
+//const decoded: Response.TorrentGet = try std.json.parseFromSlice(
+//Response.TorrentGet,
+//client.allocator,
+//body,
+//std.json.ParseOptions{
+//.ignore_unknown_fields = true,
+//.duplicate_field_behavior = .@"error",
+//},
+//);
+//return Response.Object.init(.{ .torrent_get = decoded.arguments }, decoded.result);
+//}
+
+//pub fn session_set_raw(client: *Client, session_set: Request.SessionSet) ![]u8 {
+//const r = Request.Object{
+//.method = .session_set,
+//.arguments = .{ .session_set = session_set },
+//};
+//const body = try client.do(r);
+//return body;
+//}