A simple, opinionated, struct-based argument parser in Zig, taking full advantage of comptime.
Blog post explaining how simargs
is implemented:
- Supported data type:
- All primitive types, such as
i8
,f32
,bool
[]const u8
Enum
- All primitive types, such as
- Optional fields and fields with default value mean they are optional arguments
- Use
comptime
as possible as I can - Provide
print_help()
out of the box
See demo.zig
# Run demo
zig build && ./zig-out/bin/demo -o /tmp/a.out --user-agent Firefox hello world 2>&1
------------------------------Program------------------------------ ./zig-out/bin/demo ------------------------------Arguments------------------------------ verbose: null user-agent: demo.main__struct_1543.main__struct_1543__enum_1632.Firefox timeout: 30 output: /tmp/a.out ------------------------------Positionals------------------------------ 1: hello 2: world ------------------------------print_help------------------------------ USAGE: ./zig-out/bin/demo [OPTIONS] [--] [file] OPTIONS: -v, --verbose Make the operation more talkative -A, --user-agent STRING (valid: Chrome|Firefox|Safari)(default: Firefox) --timeout INTEGER Max time this request can cost(default: 30) -o, --output STRING Write to file instead of stdout(required)
Add simargs
to your projects via submodule, and in build.zig
add
exe.addPackagePath("simargs", "libs/simargs/src/simargs.zig");
Then import like this in your Zig code:
const simargs = @import("simargs");
If you’d like to be added to this list, welcome to open a PR.
When implement simargs
, I refer following projects to learn how to write
idiomatic Zig code. Big Thanks!