nexgenomics 0.2.8

The official Rust crate for NexGenomics
Documentation


// src/utils.rs


use std::env;
use configparser::ini::Ini;
use dirs_next::home_dir;

const INIFILE:&str = ".nexgenomicsrc";
const SECTION:&str = "nexgenomics";
const DEFAULT_URL_STEM:&str = "https://agentstore.nexgenomics.ai";



pub fn get_key_from_config_file(key:&str) -> Option<String> {
    let fname = home_dir().map(|mut path| {
        path.push (INIFILE);
        path
    });

    let mut config = Ini::new();
    let _ = config.load(fname.unwrap());

    config.get(SECTION,key)
}


#[allow(dead_code)]
pub fn get_api_auth_token() -> Option<String> {
    let envstring = "API_AUTH_TOKEN";
    let key = "api_auth_token";

    // Check env var first
    if let Ok(env_val) = env::var(envstring) {
        return Some(env_val);
    }

    // now look in an ini file
    get_key_from_config_file (key)
}



#[allow(dead_code)]
pub fn get_api_url_stem() -> Option<String> {
    let envstring = "API_URL_STEM";
    let key = "api_url_stem";

    // Check env var first
    if let Ok(env_val) = env::var(envstring) {
        return Some(env_val);
    }

    // now look in an ini file
    match get_key_from_config_file (key) {
        Some(a) => Some(a),
        None => Some(DEFAULT_URL_STEM.to_string()),
    }
}


pub fn set_api_auth_token(token:&String) -> Result<(), Box<dyn std::error::Error>> {

    let config_path = home::home_dir()
        .map (|hm| hm.join(INIFILE))
        .ok_or("No home directory")?;
    let fname:&str = config_path.to_str().unwrap().into();

    let mut config = Ini::new();
    if config_path.exists() {
        config.load(fname)?;
    }

    config.set("nexgenomics","api_auth_token", Some(token.to_string()));
    config.write (fname)?;

    Ok(())
}