mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
use std::fs;
 | 
						|
use std::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);
 | 
						|
    }
 | 
						|
}
 |