// client export fn zaprus_init() c_int { SaprusClient.init() catch return 1; return 0; } export fn zaprus_deinit() c_int { SaprusClient.deinit(); return 0; } export fn zaprus_send_relay(payload: [*]const u8, len: usize, dest: [4]u8) c_int { SaprusClient.sendRelay(payload[0..len], dest, allocator) catch return 1; return 0; } export fn zaprus_send_initial_connection(payload: [*]const u8, len: usize, initial_port: u16) c_int { SaprusClient.sendInitialConnection(payload[0..len], initial_port, allocator) catch return 1; return 0; } export fn zaprus_connect(payload: [*]const u8, len: usize) ?*SaprusMessage { return SaprusClient.connect(payload[0..len], allocator) catch null; } // message /// ptr should be freed by the caller. export fn zaprus_message_to_bytes(msg: SaprusMessage, ptr: *[*]u8, len: *usize) c_int { const bytes = msg.toBytes(allocator) catch return 1; ptr.* = bytes[0..].*; len.* = bytes.len; return 0; } /// Return value should be destroyed with zaprus_message_deinit. export fn zaprus_message_from_bytes(bytes: [*]const u8, len: usize) ?*SaprusMessage { return SaprusMessage.fromBytes(bytes[0..len], allocator) catch null; } export fn zaprus_message_deinit(msg: *SaprusMessage) void { msg.deinit(allocator); } const std = @import("std"); const zaprus = @import("./root.zig"); const SaprusClient = zaprus.Client; const SaprusMessage = zaprus.Message; const allocator = std.heap.c_allocator; test { std.testing.refAllDeclsRecursively(@This()); }