jiacai2050 / simargs

A simple, opinionated, struct-based argument parser in Zig.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SimArgs

Notice: this repo has moved to https://github.com/jiacai2050/zigcli.

https://github.com/jiacai2050/simargs/actions/workflows/CI.yml/badge.svg

A simple, opinionated, struct-based argument parser in Zig, taking full advantage of comptime.

Blog post explaining how simargs is implemented:

Features

  • Supported data type:
  • 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

Usage

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_1677.main__struct_1677__enum_1777.Firefox
   timeout: 30
    output: /tmp/a.out
      help: false

------------------------------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)
	-h, --help

Install

First add simargs to build.zig.zon of your project

.{
    .name = "..",
    .version = "..",
    .dependencies = .{
        .simargs = .{
            .url = "https://github.com/jiacai2050/simargs/archive/0a1a2afd072cc915009a063075743192fc6b1fd5.tar.gz",
            .hash = "1220a6554eccb2e9a9d7d63047e062314851ffd11315b9e6d1b5e06a9dde3275f150",
        },
    },
}

Then addModule in build.zig

const dep_simargs = b.dependency("simargs", .{
    .target = target,
    .optimize = optimize,
});
exe.addModule("simargs", dep_simargs.module("simargs"));

Finally import like this in your Zig code:

const simargs = @import("simargs");

Who’s Using

If you’d like to be added to this list, welcome to open a PR.

Acknowledgment

When implement simargs, I refer following projects to learn how to write idiomatic Zig code. Big Thanks!

About

A simple, opinionated, struct-based argument parser in Zig.

License:MIT License


Languages

Language:Zig 100.0%