twitch_webhook/src/main.zig

52 lines
1.2 KiB
Zig
Raw Permalink Normal View History

2022-01-06 07:38:20 +00:00
const std = @import("std");
const json = std.json;
2022-08-20 08:15:38 +00:00
const Client = @import("curl.zig").Client;
2022-02-03 11:10:32 +00:00
const App = @import("app.zig");
2022-01-06 07:38:20 +00:00
2022-02-03 11:10:32 +00:00
pub var app: ?App = null;
2022-01-19 20:35:59 +00:00
fn handler_fn(_: c_int) callconv(.C) void {
2022-02-03 11:10:32 +00:00
app.?.stop();
2022-01-19 20:35:59 +00:00
}
fn setupSigIntHandler() void {
const handler = std.os.Sigaction{
.handler = .{
.handler = handler_fn,
},
.mask = std.os.empty_sigset,
.flags = std.os.SA.RESETHAND,
};
if (std.os.linux.sigaction(std.os.SIG.INT, &handler, null) == -1) {
std.os.linux.perror("Failed to set signal");
}
}
2022-01-06 07:38:20 +00:00
pub fn main() anyerror!void {
2022-01-19 20:35:59 +00:00
setupSigIntHandler();
var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
var allocator = general_purpose_allocator.allocator();
2022-01-06 07:38:20 +00:00
2022-02-03 11:10:32 +00:00
app = try App.init(allocator);
2022-02-03 11:10:32 +00:00
app.?.run() catch |e| {
std.log.err("Error while running app: {}", .{e});
};
2022-01-06 07:38:20 +00:00
2022-02-03 11:10:32 +00:00
const stdout = std.io.getStdOut().writer();
stdout.print("stopping ...", .{}) catch {};
2022-01-19 20:35:59 +00:00
2022-02-03 11:10:32 +00:00
_ = app.?.deinit() catch |e| {
std.log.err("Failed to deinit app: {}", .{e});
};
2022-01-06 07:38:20 +00:00
try Client.cleanup();
if (general_purpose_allocator.deinit()) {
std.log.err("leaked bytes", .{});
}
2022-01-06 07:38:20 +00:00
}