use ini_merge::mutations::transforms as ini_transforms;
use std::collections::HashMap;
use strum::EnumIter;
use strum::EnumMessage;
use strum::EnumString;
use strum::IntoStaticStr;
#[allow(clippy::doc_markdown)]
#[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");
use itertools::Itertools;
println!(
"{}",
Itertools::intersperse(docs, "\n\n".to_string()).collect::<String>()
);
}
pub(crate) fn construct(
self,
args: &HashMap<String, String>,
) -> anyhow::Result<ini_transforms::TransformerDispatch> {
use ini_transforms::Transformer;
match self {
Self::UnsortedLists => {
Ok(ini_transforms::TransformUnsortedLists::from_user_input(args)?.into())
}
Self::KdeShortcut => {
Ok(ini_transforms::TransformKdeShortcut::from_user_input(args)?.into())
}
#[cfg(feature = "keyring")]
Self::Keyring => Ok(ini_transforms::TransformKeyring::from_user_input(args)?.into()),
#[cfg(not(feature = "keyring"))]
Transform::Keyring => Err(anyhow::anyhow!(
"This build of chezmoi_modify_manager does not support the keyring transform"
)),
}
}
}