Thanks to visit codestin.com
Credit goes to lib.rs

30 releases

0.2.24 Aug 29, 2025
0.2.23 Jun 9, 2025
0.2.21 Aug 19, 2019
0.2.19 May 2, 2019
0.1.0 Dec 13, 2014

#90 in Command-line interface

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

3,394,732 downloads per month
Used in 1,871 crates (508 directly)

MIT/Apache

82KB
2K SLoC

getopts

A Rust library for option parsing for CLI utilities.

Documentation

Usage

Add this to your Cargo.toml:

[dependencies]
getopts = "0.2"

Contributing

The getopts library is used by rustc, so we have to be careful about not changing its behavior.


lib.rs:

Simple getopt alternative.

Construct instance of Options and configure it by using reqopt(), optopt() and other methods that add option configuration. Then call parse() method and pass into it a vector of actual arguments (not including argv[0]).

You'll either get a failure code back, or a match. You'll have to verify whether the amount of 'free' arguments in the match is what you expect. Use opt_* accessors to get argument values out of the matches object.

Single-character options are expected to appear on the command line with a single preceding dash; multiple-character options are expected to be proceeded by two dashes. Options that expect an argument accept their argument following either a space or an equals sign. Single-character options don't require the space. Everything after double-dash "--" argument is considered to be a 'free' argument, even if it starts with dash.

Usage

This crate is on crates.io and can be used by adding getopts to the dependencies in your project's Cargo.toml.

[dependencies]
getopts = "0.2"

and this to your crate root:

extern crate getopts;

Example

The following example shows simple command line parsing for an application that requires an input file to be specified, accepts an optional output file name following -o, and accepts both -h and --help as optional flags.

extern crate getopts;
use getopts::Options;
use std::env;

fn do_work(inp: &str, out: Option<String>) {
    println!("{}", inp);
    match out {
        Some(x) => println!("{}", x),
        None => println!("No Output"),
    }
}

fn print_usage(program: &str, opts: Options) {
    let brief = format!("Usage: {} FILE [options]", program);
    print!("{}", opts.usage(&brief));
}

fn main() {
    let args: Vec<String> = env::args().collect();
    let program = args[0].clone();

    let mut opts = Options::new();
    opts.optopt("o", "", "set output file name", "NAME");
    opts.optflag("h", "help", "print this help menu");
    let matches = match opts.parse(&args[1..]) {
        Ok(m) => { m }
        Err(f) => { panic!("{}", f.to_string()) }
    };
    if matches.opt_present("h") {
        print_usage(&program, opts);
        return;
    }
    let output = matches.opt_str("o");
    let input = if !matches.free.is_empty() {
        matches.free[0].clone()
    } else {
        print_usage(&program, opts);
        return;
    };
    do_work(&input, output);
}

Dependencies

~0–395KB