joshuto 0.9.5

Terminal file manager inspired by ranger
use std::collections::HashMap;

use crate::error::JoshutoResult;

pub use self::icons_raw::*;

use super::{parse_config_or_default, TomlConfigFile};

#[cfg(not(target_os = "windows"))]
const DEFAULT_ICONS: &str = include_str!("../../../config/icons.toml");

#[cfg(target_os = "windows")]
const DEFAULT_ICONS: &str = include_str!("..\\..\\..\\config\\icons.toml");

pub mod icons_raw;

#[derive(Debug)]
pub struct Icons {
    pub directory_exact: HashMap<String, String>,
    pub file_exact: HashMap<String, String>,
    pub ext: HashMap<String, String>,
    pub default_file: String,
    pub default_dir: String,
}

impl From<IconsRaw> for Icons {
    fn from(value: IconsRaw) -> Self {
        Icons {
            directory_exact: value.directory_exact,
            file_exact: value.file_exact,
            ext: value.ext,
            default_file: value.defaults.file,
            default_dir: value.defaults.directory,
        }
    }
}

impl Icons {
    pub(crate) fn default_icons() -> JoshutoResult<Self> {
        let icons: IconsRaw = toml::from_str(DEFAULT_ICONS)?;
        Ok(Self::from(icons))
    }
}

impl std::default::Default for Icons {
    fn default() -> Self {
        Self::default_icons().unwrap()
    }
}

impl TomlConfigFile for Icons {
    fn get_config(file_name: &str) -> Self {
        parse_config_or_default::<IconsRaw, Icons>(file_name)
    }
}