From 3bd3f432a95da405634cdbd2a662d79a3a5ba7af Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Sun, 11 Jun 2023 22:09:15 +0200 Subject: wip --- src/main.zig | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/main.zig (limited to 'src/main.zig') 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); +} -- cgit v1.2.3