const std = @import("std"); const version = @import("version.zig"); const usage = \\usage: nxdns \\ \\commands: \\ run serve DNS \\ check validate the configuration \\ export write local records to stdout \\ import read local records from stdin \\ version print version information \\ ; const exit_ok = 0; const exit_not_implemented = 2; const exit_usage = 64; pub fn main(init: std.process.Init) u8 { var args = init.minimal.args.iterate(); _ = args.skip(); const command = args.next() orelse return fail(init.io, usage); if (std.mem.eql(u8, command, "version")) { return print(init.io, "nxdns {s} ({s})\nzig {s}\n", .{ version.string, version.git_commit, version.zig_version_string, }); } for ([_][]const u8{ "run", "check", "export", "import" }) |known| { if (std.mem.eql(u8, command, known)) { _ = print(init.io, "not implemented\n", .{}); return exit_not_implemented; } } return fail(init.io, usage); } fn print(io: std.Io, comptime format: []const u8, arguments: anytype) u8 { var buffer: [512]u8 = undefined; var file_writer = std.Io.File.stdout().writer(io, &buffer); file_writer.interface.print(format, arguments) catch return 1; file_writer.interface.flush() catch return 1; return exit_ok; } fn fail(io: std.Io, message: []const u8) u8 { var buffer: [512]u8 = undefined; var file_writer = std.Io.File.stderr().writer(io, &buffer); file_writer.interface.writeAll(message) catch {}; file_writer.interface.flush() catch {}; return exit_usage; }