Rust default function parameters and Clap-rs argument YAMLs

created: 2020-12-26T15:47:01Z
modified: 2020-12-26T15:47:01Z

Being new to Rust and coming from dramatically different languages naturally I searched last night for how to handle default function parameters. I had thought that surely I was just missing some obscure little syntactical trick that would make them work, I was surprised when a handful of searches camme back with:

Rust doesn’t support default function arguments.

Ok. Took a little bit to digest. I actually slept on it and then it came to me this morning.

"I can just use a struct constructor, should be easy." - thoughts in my head


clap = { git = "https://github.com/clap-rs/clap/", features = ["yaml"] }

Yeah, I know. It’s the beta 1, hang with me.


extern crate clap;

struct State {
    verbose: bool,

impl State {
    fn new() -> State {
        State {
            verbose: false,

fn main() {
    let mut state = State::new();
    use clap::{load_yaml, App};
    let yml = load_yaml!("cli.yml");
    let matches = App::from(yml).get_matches();
    if matches.is_present("verbose") {
        state.verbose = true;


fn something(state: State) {
    println!("What’s our state? {:?}", state.verbose)

NOTE: No need for the cfg attribute in the Clap 3.x-beta1

All this talk of default arguments made me forget the real hotness, arg definitions in YAML!


name: verbose_app
version: "0.1"
about: This does next to nothing except take verbose flag
author: gatewaynode <44749714+gatewaynode@users.noreply.github.com>

    - verbose:
        short: v
        long: verbose
        takes_value: false
  • Creative Commons License
  • Author: Gatewaynode