summaryrefslogtreecommitdiff
path: root/src/types.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/types.zig
parentb02b7f71978a172848322f0671d580e425634916 (diff)
downloadzmission-f743e05e207046073999ee7234a157359d6a4f57.tar.gz
Diffstat (limited to 'src/types.zig')
-rw-r--r--src/types.zig45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/types.zig b/src/types.zig
index 7de8fa1..7ed50dc 100644
--- a/src/types.zig
+++ b/src/types.zig
@@ -1,3 +1,7 @@
+const std = @import("std");
+
+const Request = @import("request.zig").Request;
+
// types are from:
// https://github.com/transmission/transmission/blob/76166d8fa71f351fe46221d737f8849b23f551f7/libtransmission/transmission.h#L1604
// where:
@@ -225,3 +229,44 @@ pub const Torrent = struct {
// Number of webseeds that are sending data to us.
webseedsSendingToUs: ?u16 = null,
};
+
+// Checks that all fields in Torrent are in sync with TorrentGet.Fields
+test "torrent fields" {
+ @setEvalBranchQuota(10000);
+
+ const torrent_get_request_fields = comptime blk: {
+ const kv = struct { []const u8 };
+ var slice: []const kv = &[_]kv{};
+
+ for (std.meta.fields(Request.TorrentGet.Fields)) |field| {
+ slice = slice ++ &[_]kv{.{field.name}};
+ }
+
+ break :blk std.ComptimeStringMap(void, slice);
+ };
+
+ const torrent_fields = comptime blk: {
+ const kv = struct { []const u8 };
+ var slice: []const kv = &[_]kv{};
+
+ for (std.meta.fields(Torrent)) |field| {
+ slice = slice ++ &[_]kv{.{field.name}};
+ }
+
+ break :blk std.ComptimeStringMap(void, slice);
+ };
+
+ inline for (std.meta.fields(Torrent)) |field| {
+ if (!torrent_get_request_fields.has(field.name)) {
+ std.debug.print("field is present in Torrent but missing in TorrentGet: {s}\n", .{field.name});
+ }
+ //try std.testing.expect(torrent_get_request_fields.has(field.name));
+ }
+
+ inline for (std.meta.fields(Request.TorrentGet.Fields)) |field| {
+ if (!torrent_fields.has(field.name)) {
+ std.debug.print("field is present in TorrentGet but missing in Torrent: {s}\n", .{field.name});
+ }
+ //try std.testing.expect(torrent_fields.has(field.name));
+ }
+}