zig-args/demo.zig

45 lines
1.3 KiB
Zig
Raw Normal View History

2020-03-05 05:37:11 +08:00
const std = @import("std");
const argsParser = @import("args");
2020-03-05 05:37:11 +08:00
pub fn main() !u8 {
var argsAllocator = std.heap.page_allocator;
2020-03-05 05:37:11 +08:00
const options = argsParser.parseForCurrentProcess(struct {
2020-03-05 05:38:26 +08:00
// This declares long options for double hyphen
2020-03-05 05:37:11 +08:00
output: ?[]const u8 = null,
@"with-offset": bool = false,
@"with-hexdump": bool = false,
@"intermix-source": bool = false,
numberOfBytes: ?i32 = null,
2020-11-15 10:11:56 +08:00
signed_number: ?i64 = null,
unsigned_number: ?u64 = null,
mode: enum { default, special, slow, fast } = .default,
2020-03-05 05:37:11 +08:00
2020-03-05 05:38:26 +08:00
// This declares short-hand options for single hyphen
2020-03-05 05:37:11 +08:00
pub const shorthands = .{
.S = "intermix-source",
.b = "with-hexdump",
.O = "with-offset",
.o = "output",
};
}, argsAllocator, .print) catch return 1;
2020-03-05 05:37:11 +08:00
defer options.deinit();
2022-08-02 15:27:26 +08:00
std.debug.print("executable name: {?s}\n", .{options.executable_name});
2020-06-26 17:27:17 +08:00
std.debug.print("parsed options:\n", .{});
inline for (std.meta.fields(@TypeOf(options.options))) |fld| {
2021-02-15 18:01:49 +08:00
std.debug.print("\t{s} = {any}\n", .{
fld.name,
@field(options.options, fld.name),
});
}
2020-06-26 17:27:17 +08:00
std.debug.print("parsed positionals:\n", .{});
for (options.positionals) |arg| {
2021-01-04 18:37:36 +08:00
std.debug.print("\t'{s}'\n", .{arg});
2020-03-05 05:37:11 +08:00
}
return 0;
2020-03-05 05:37:11 +08:00
}