std.debug.print -> stdout/stderr
All checks were successful
Generic zig build / build (push) Successful in 28s
All checks were successful
Generic zig build / build (push) Successful in 28s
This commit is contained in:
parent
0a2ceec30b
commit
945b8d23f7
1 changed files with 35 additions and 16 deletions
51
src/main.zig
51
src/main.zig
|
@ -4,11 +4,24 @@ const root = @import("root.zig");
|
||||||
|
|
||||||
const version = @import("build_options").git_revision;
|
const version = @import("build_options").git_revision;
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !u8 {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
|
// SAFETY: buffer to be used by writer
|
||||||
|
var stdout_buffer: [1024]u8 = undefined;
|
||||||
|
var stdout_f = std.fs.File.stdout().writer(&stdout_buffer);
|
||||||
|
const stdout = &stdout_f.interface;
|
||||||
|
// SAFETY: buffer to be used by writer
|
||||||
|
var stderr_buffer: [1024]u8 = undefined;
|
||||||
|
var stderr_f = std.fs.File.stdout().writer(&stderr_buffer);
|
||||||
|
const stderr = &stderr_f.interface;
|
||||||
|
|
||||||
|
errdefer stdout.flush() catch @panic("could not flush stdout");
|
||||||
|
errdefer stderr.flush() catch @panic("could not flush stdout");
|
||||||
|
defer stdout.flush() catch @panic("could not flush stdout");
|
||||||
|
defer stderr.flush() catch @panic("could not flush stdout");
|
||||||
// Parse CLI arguments
|
// Parse CLI arguments
|
||||||
var port: u16 = 5000;
|
var port: u16 = 5000;
|
||||||
var args = try std.process.argsWithAllocator(allocator);
|
var args = try std.process.argsWithAllocator(allocator);
|
||||||
|
@ -16,7 +29,7 @@ pub fn main() !void {
|
||||||
_ = args.skip(); // skip program name
|
_ = args.skip(); // skip program name
|
||||||
while (args.next()) |arg| {
|
while (args.next()) |arg| {
|
||||||
if (std.mem.eql(u8, arg, "--help") or std.mem.eql(u8, arg, "-h")) {
|
if (std.mem.eql(u8, arg, "--help") or std.mem.eql(u8, arg, "-h")) {
|
||||||
std.debug.print(
|
try stdout.writeAll(
|
||||||
\\Zetviel - Email client for notmuch
|
\\Zetviel - Email client for notmuch
|
||||||
\\
|
\\
|
||||||
\\Usage: zetviel [OPTIONS]
|
\\Usage: zetviel [OPTIONS]
|
||||||
|
@ -29,36 +42,41 @@ pub fn main() !void {
|
||||||
\\Environment:
|
\\Environment:
|
||||||
\\ NOTMUCH_PATH Path to notmuch database (default: mail)
|
\\ NOTMUCH_PATH Path to notmuch database (default: mail)
|
||||||
\\
|
\\
|
||||||
, .{});
|
);
|
||||||
std.process.exit(0);
|
return 0;
|
||||||
} else if (std.mem.eql(u8, arg, "--version") or std.mem.eql(u8, arg, "-v")) {
|
} else if (std.mem.eql(u8, arg, "--version") or std.mem.eql(u8, arg, "-v")) {
|
||||||
std.debug.print("Zetviel {s}\n", .{version});
|
try stdout.print("Zetviel {s}\n", .{version});
|
||||||
std.process.exit(0);
|
return 0;
|
||||||
} else if (std.mem.eql(u8, arg, "--port")) {
|
} else if (std.mem.eql(u8, arg, "--port")) {
|
||||||
const port_str = args.next() orelse {
|
const port_str = args.next() orelse {
|
||||||
std.debug.print("Error: --port requires a value\n", .{});
|
try stderr.writeAll("Error: --port requires a value\n");
|
||||||
std.process.exit(1);
|
return 1;
|
||||||
};
|
};
|
||||||
port = std.fmt.parseInt(u16, port_str, 10) catch {
|
port = std.fmt.parseInt(u16, port_str, 10) catch {
|
||||||
std.debug.print("Error: invalid port number\n", .{});
|
try stderr.writeAll("Error: invalid port number\n");
|
||||||
std.process.exit(1);
|
return 1;
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
std.debug.print("Error: unknown argument '{s}'\n", .{arg});
|
try stderr.print("Error: unknown argument '{s}'\n", .{arg});
|
||||||
std.debug.print("Use --help for usage information\n", .{});
|
try stderr.writeAll("Use --help for usage information\n");
|
||||||
std.process.exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get notmuch database path from environment or use default
|
// Get notmuch database path from environment or use default
|
||||||
const db_path = std.posix.getenv("NOTMUCH_PATH") orelse "mail";
|
const db_path = std.posix.getenv("NOTMUCH_PATH") orelse "mail";
|
||||||
|
try stdout.print("Notmuch database: {s}\n", .{db_path});
|
||||||
|
|
||||||
// Open notmuch database
|
// Open notmuch database
|
||||||
var db = try root.openNotmuchDb(allocator, db_path, null);
|
var db = try root.openNotmuchDb(
|
||||||
|
allocator,
|
||||||
|
db_path,
|
||||||
|
null,
|
||||||
|
);
|
||||||
defer db.close();
|
defer db.close();
|
||||||
|
|
||||||
std.debug.print("Zetviel starting on http://localhost:{d}\n", .{port});
|
try stdout.print("Zetviel starting on http://localhost:{d}\n", .{port});
|
||||||
std.debug.print("Notmuch database: {s}\n", .{db.path});
|
try stdout.flush(); // flush before we listen
|
||||||
|
|
||||||
// Create HTTP server
|
// Create HTTP server
|
||||||
var server = try httpz.Server(*root.NotmuchDb).init(allocator, .{
|
var server = try httpz.Server(*root.NotmuchDb).init(allocator, .{
|
||||||
|
@ -81,6 +99,7 @@ pub fn main() !void {
|
||||||
router.get("/*", staticHandler, .{});
|
router.get("/*", staticHandler, .{});
|
||||||
|
|
||||||
try server.listen();
|
try server.listen();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn indexHandler(db: *root.NotmuchDb, _: *httpz.Request, res: *httpz.Response) !void {
|
fn indexHandler(db: *root.NotmuchDb, _: *httpz.Request, res: *httpz.Response) !void {
|
||||||
|
|
Loading…
Add table
Reference in a new issue