summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig
new file mode 100644
index 0000000..1b796a3
--- /dev/null
+++ b/src/main.zig
@@ -0,0 +1,73 @@
+const std = @import("std");
+const testing = std.testing;
+const transmission = @import("transmission.zig");
+
+var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+const allocator = gpa.allocator();
+
+export fn add(a: i32, b: i32) i32 {
+ const clientOptions = transmission.ClientOptions{
+ .host = "192.168.0.2",
+ .port = 9091,
+ .https = false,
+ };
+ var client = transmission.Client.init(allocator, clientOptions);
+ defer client.deinit();
+
+ const body = transmission.sessionGet(&client) catch |err| {
+ std.debug.print("error: {any}\n", .{err});
+ unreachable;
+ };
+ defer allocator.free(body);
+
+ std.debug.print("body: {s}\n", .{body});
+
+ return a + b;
+}
+
+export fn c_client_init(clientOptions: transmission.ClientOptions) ?*anyopaque {
+ var client = allocator.create(transmission.Client) catch unreachable;
+ client.* = transmission.Client.init(allocator, clientOptions);
+ return @ptrCast(*anyopaque, client);
+}
+
+export fn c_client_deinit(client: ?*anyopaque) void {
+ var real_client: *transmission.Client = @ptrCast(*transmission.Client, @alignCast(
+ @alignOf(transmission.Client),
+ client.?,
+ ));
+ real_client.*.deinit();
+ allocator.destroy(real_client);
+}
+
+export fn c_session_get(client: ?*anyopaque, buf: [*]u8) c_int {
+ var real_client: *transmission.Client = @ptrCast(*transmission.Client, @alignCast(
+ @alignOf(transmission.Client),
+ client.?,
+ ));
+
+ const body = transmission.sessionGet(real_client) catch |err| {
+ std.debug.print("error: {any}\n", .{err});
+ unreachable;
+ };
+ defer allocator.free(body);
+
+ std.debug.print("body: {s}\n", .{body});
+ _ = buf;
+ return 0;
+}
+
+test "basic add functionality" {
+ try testing.expect(add(3, 7) == 10);
+}
+
+test "c api" {
+ const clientOptions = transmission.ClientOptions{
+ .host = "192.168.0.2",
+ .port = 9091,
+ .https = false,
+ };
+ var foo = c_client_init(clientOptions);
+ _ = c_session_get(foo, undefined);
+ c_client_deinit(foo);
+}