use std::collections::HashMap;
use ini_merge::mutations::transforms as ini_transforms;
use itertools::Itertools;
use strum::{EnumIter, EnumMessage, EnumString, IntoStaticStr};
#[derive(Debug, Clone, Copy, PartialEq, Eq, EnumIter, EnumString, IntoStaticStr, EnumMessage)]
pub(crate) enum Transform {
#[strum(serialize = "unsorted-list")]
UnsortedLists,
#[strum(serialize = "kde-shortcut")]
KdeShortcut,
#[strum(serialize = "keyring")]
Keyring,
}
impl Transform {
pub(crate) fn help() {
use strum::IntoEnumIterator;
let docs = Self::iter().map(|elem| {
let name: &str = elem.into();
format!(
"{}\n{}\n{}",
name,
"-".repeat(name.len()),
elem.get_documentation().unwrap_or("Missing docs")
)
});
println!("Supported transforms:");
println!("====================\n");
println!(
"{}",
Itertools::intersperse(docs, "\n\n".to_string()).collect::<String>()
);
}
pub(crate) fn construct(
&self,
args: &HashMap<String, String>,
) -> Result<Box<dyn ini_transforms::Transformer>, ini_transforms::TransformerError> {
use ini_transforms::Transformer;
match self {
Transform::UnsortedLists => Ok(Box::new(
ini_transforms::TransformUnsortedLists::from_user_input(args)?,
)),
Transform::KdeShortcut => Ok(Box::new(
ini_transforms::TransformKdeShortcut::from_user_input(args)?,
)),
Transform::Keyring => Ok(Box::new(ini_transforms::TransformKeyring::from_user_input(
args,
)?)),
}
}
}