generate-readme 0.1.2

A command-line utlity to help you generate README.md files.
use crate::ui;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct Config {
    email: String,
    github_username: String,
}

pub fn load_user_config() {
    match dirs::config_dir() {
        Some(config_dir) => {
            let app_config_dir = config_dir.join("generate-readme");
            std::fs::create_dir_all(&app_config_dir).expect("Failed to create config directory");

            let config_file_path = app_config_dir.join("config.toml");

            if !config_file_path.exists() {
                println!("Config file does not exist. Creating one...");

                let config = Config {
                    email: "user@example.com".to_string(),
                    github_username: "username".to_string(),
                };

                let toml = toml::to_string(&config).unwrap();

                if let Some(edited) = ui::editor(&toml) {
                    println!("Edited: {:?}", edited);

                    // match std::fs::write(&config_file_path, &toml) {
                    //     Ok(_) => println!("Config file created successfully"),
                    //     Err(err) => println!("Error creating config file: {}", err),
                    // }
                } else {
                    println!("No changes made to config file");
                }

                match std::fs::write(&config_file_path, &toml) {
                    Ok(_) => println!("Config file created successfully"),
                    Err(err) => eprintln!("Error creating config file: {}", err),
                }
            } else {
                let contents = match std::fs::read_to_string(&config_file_path) {
                    Ok(contents) => contents,
                    Err(err) => {
                        eprintln!("Error reading config file: {}", err);
                        return;
                    }
                };

                let config: Config = match toml::from_str(&contents) {
                    Ok(config) => config,
                    Err(err) => {
                        eprintln!("Error parsing config file: {}", err);
                        return;
                    }
                };

                println!("Config loaded successfully: {:?}", config);
            }
        }
        None => println!("Failed to load config directory"),
    }
}

pub fn read_global_git_info(arg: &str) -> Option<String> {
    let cmd = std::process::Command::new("git")
        .arg("config")
        .arg("--global")
        .arg("--get")
        .arg(arg)
        .output()
        .ok()?;

    match cmd.status.success() {
        true => Option::from(String::from_utf8_lossy(&cmd.stdout).to_string()),
        false => Option::from(None),
    }
}

pub fn read_local_git_info(arg: &str) -> Option<String> {
    let cmd = std::process::Command::new("git")
        .arg("config")
        .arg("--get")
        .arg(arg)
        .output()
        .ok()?;

    match cmd.status.success() {
        true => Option::from(String::from_utf8_lossy(&cmd.stdout).to_string()),
        false => Option::from(None),
    }
}