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); }