forecaster 0.1.1

A simple weather forecaster that takes all the data from https://openweathermap.org/ and displays it in a nice way.
use directories::ProjectDirs;
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::PathBuf;

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Config {
    pub api_key: Option<String>,
    pub default_town: Option<String>,
}

pub fn read_config_value(value: &str) -> Option<String> {
    let config = read_config();

    match value {
        "api_key" => config.api_key,
        "default_town" => config.default_town,
        &_ => None,
    }
}

pub fn read_config() -> Config {
    let default_config = Config {
        api_key: Some("".to_string()),
        default_town: Some("".to_string()),
    };

    let project_dirs = match ProjectDirs::from("com", "rukomoynikov", "weather_cli") {
        None => {
            println!("Couldn't find directory for config");
            return default_config.clone();
        }
        Some(dir) => dir,
    };

    let config_dir = project_dirs.config_dir();

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

    let default_config_stringified = toml::to_string(&default_config).unwrap();

    let config_file = fs::read_to_string(config_file_path).unwrap_or(default_config_stringified);

    match toml::from_str::<Config>(&config_file) {
        Ok(config) => config,
        Err(_) => {
            println!("Couldn't parse config file");
            default_config
        }
    }
}

pub fn get_config_dir() -> Result<PathBuf, String> {
    let project_dirs = match ProjectDirs::from("com", "rukomoynikov", "weather_cli") {
        None => return Err("Couldn't find directory for config".to_string()),
        Some(dir) => dir,
    };

    Ok(project_dirs.config_dir().to_path_buf())
}