From b11f0d5cc94f6dad1b7d794ff54cd7320425d176 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 27 Aug 2024 13:31:59 -0700 Subject: [PATCH] pkg/sentry: custom transports --- pkg/sentry/envelope.zig | 10 ++++++++++ pkg/sentry/main.zig | 4 ++++ pkg/sentry/transport.zig | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 pkg/sentry/envelope.zig create mode 100644 pkg/sentry/transport.zig diff --git a/pkg/sentry/envelope.zig b/pkg/sentry/envelope.zig new file mode 100644 index 000000000..38253f290 --- /dev/null +++ b/pkg/sentry/envelope.zig @@ -0,0 +1,10 @@ +const std = @import("std"); +const assert = std.debug.assert; +const c = @import("c.zig").c; + +/// sentry_envelope_t +pub const Envelope = opaque { + pub fn deinit(self: *Envelope) void { + c.sentry_envelope_free(@ptrCast(self)); + } +}; diff --git a/pkg/sentry/main.zig b/pkg/sentry/main.zig index b8133800f..92e52cee3 100644 --- a/pkg/sentry/main.zig +++ b/pkg/sentry/main.zig @@ -1,6 +1,10 @@ pub const c = @import("c.zig").c; +const transport = @import("transport.zig"); + +pub const Envelope = @import("envelope.zig").Envelope; pub const Level = @import("level.zig").Level; +pub const Transport = transport.Transport; pub const Value = @import("value.zig").Value; pub const UUID = @import("uuid.zig").UUID; diff --git a/pkg/sentry/transport.zig b/pkg/sentry/transport.zig new file mode 100644 index 000000000..835b87cd3 --- /dev/null +++ b/pkg/sentry/transport.zig @@ -0,0 +1,26 @@ +const std = @import("std"); +const assert = std.debug.assert; +const c = @import("c.zig").c; +const Envelope = @import("envelope.zig").Envelope; + +/// sentry_transport_t +pub const Transport = opaque { + pub const SendFunc = *const fn (envelope: *Envelope, state: ?*anyopaque) callconv(.C) void; + pub const FreeFunc = *const fn (state: ?*anyopaque) callconv(.C) void; + + pub fn init(f: SendFunc) *Transport { + return @ptrCast(c.sentry_transport_new(@ptrCast(f)).?); + } + + pub fn deinit(self: *Transport) void { + c.sentry_transport_free(@ptrCast(self)); + } + + pub fn setState(self: *Transport, state: ?*anyopaque) void { + c.sentry_transport_set_state(@ptrCast(self), state); + } + + pub fn setStateFreeFunc(self: *Transport, f: FreeFunc) void { + c.sentry_transport_set_free_func(@ptrCast(self), f); + } +};