File: config.rs

package info (click to toggle)
rustc-web 1.85.0%2Bdfsg3-1~deb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 1,759,988 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,056; lisp: 29; perl: 29; ruby: 19; sql: 11
file content (55 lines) | stat: -rw-r--r-- 1,601 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use std::{fs, process};

fn load_config_file() -> Vec<(String, Option<String>)> {
    fs::read_to_string("config.txt")
        .unwrap()
        .lines()
        .map(|line| if let Some((line, _comment)) = line.split_once('#') { line } else { line })
        .map(|line| line.trim())
        .filter(|line| !line.is_empty())
        .map(|line| {
            if let Some((key, val)) = line.split_once('=') {
                (key.trim().to_owned(), Some(val.trim().to_owned()))
            } else {
                (line.to_owned(), None)
            }
        })
        .collect()
}

pub(crate) fn get_bool(name: &str) -> bool {
    let values = load_config_file()
        .into_iter()
        .filter(|(key, _)| key == name)
        .map(|(_, val)| val)
        .collect::<Vec<_>>();
    if values.is_empty() {
        false
    } else {
        if values.iter().any(|val| val.is_some()) {
            eprintln!("Boolean config `{}` has a value", name);
            process::exit(1);
        }
        true
    }
}

pub(crate) fn get_value(name: &str) -> Option<String> {
    let values = load_config_file()
        .into_iter()
        .filter(|(key, _)| key == name)
        .map(|(_, val)| val)
        .collect::<Vec<_>>();
    if values.is_empty() {
        None
    } else if values.len() == 1 {
        if values[0].is_none() {
            eprintln!("Config `{}` missing value", name);
            process::exit(1);
        }
        values.into_iter().next().unwrap()
    } else {
        eprintln!("Config `{}` given multiple values: {:?}", name, values);
        process::exit(1);
    }
}