use {
config::FileFormat,
std::fmt::{Display, Formatter, Result},
};
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum ConfigType {
App,
Keymap,
Logger,
Palette,
Theme,
Telegram,
}
impl ConfigType {
pub const fn enumerate() -> &'static [Self] {
&[
Self::App,
Self::Keymap,
Self::Logger,
Self::Palette,
Self::Theme,
Self::Telegram,
]
}
pub const fn as_str(&self) -> &'static str {
match self {
Self::App => "app",
Self::Keymap => "keymap",
Self::Logger => "logger",
Self::Palette => "theme",
Self::Theme => "theme",
Self::Telegram => "telegram",
}
}
const fn default_format(&self) -> &'static str {
match self {
Self::App => ".toml",
Self::Keymap => ".toml",
Self::Logger => ".toml",
Self::Palette => ".toml",
Self::Theme => ".toml",
Self::Telegram => ".toml",
}
}
pub fn as_default_filename(&self) -> String {
format!("{}{}", self.as_str(), self.default_format())
}
pub const fn supported_formats(&self) -> &'static [FileFormat] {
let formats = self.get_supported_formats();
match self {
Self::App => formats,
Self::Keymap => formats,
Self::Logger => formats,
Self::Palette => formats,
Self::Theme => formats,
Self::Telegram => formats,
}
}
const fn get_supported_formats(&self) -> &'static [FileFormat] {
&[
FileFormat::Json5,
FileFormat::Json,
FileFormat::Yaml,
FileFormat::Toml,
FileFormat::Ini,
FileFormat::Ron,
]
}
}
impl Display for ConfigType {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
f.write_str(self.as_str())
}
}