fn parse_args()

in sources/api/servicedog/src/main.rs [276:317]


fn parse_args(args: env::Args) -> Args {
    let mut log_level = None;
    let mut setting = None;
    let mut systemd_unit = None;

    let mut iter = args.skip(1);
    while let Some(arg) = iter.next() {
        match arg.as_ref() {
            "--log-level" => {
                let log_level_str = iter
                    .next()
                    .unwrap_or_else(|| usage_msg("Did not give argument to --log-level"));
                log_level = Some(LevelFilter::from_str(&log_level_str).unwrap_or_else(|_| {
                    usage_msg(format!("Invalid log level '{}'", log_level_str))
                }));
            }

            "-s" | "--setting" => {
                setting = Some(
                    iter.next()
                        .unwrap_or_else(|| usage_msg("Did not give argument to -s | --setting")),
                )
            }

            "-u" | "--systemd-unit" => {
                systemd_unit =
                    Some(iter.next().unwrap_or_else(|| {
                        usage_msg("Did not give argument to -u | --systemd-unit")
                    }))
            }

            _ => usage(),
        }
    }

    Args {
        log_level: log_level.unwrap_or_else(|| LevelFilter::Info),
        setting: setting.unwrap_or_else(|| usage_msg("-s|--setting is a required argument")),
        systemd_unit: systemd_unit
            .unwrap_or_else(|| usage_msg("-u|--systemd-unit is a required argument")),
    }
}