use inflector::cases::camelcase::*;
use inflector::cases::kebabcase::*;
use inflector::cases::pascalcase::*;
use inflector::cases::screamingsnakecase::*;
use inflector::cases::snakecase::*;
use inflector::cases::traincase::*;
pub enum Query {
Substring(String, String),
Regex(regex::Regex, String),
Subvert(Vec<(String, String)>),
}
impl Query {
pub fn substring(old: &str, new: &str) -> Self {
Self::Substring(old.to_string(), new.to_string())
}
pub fn regex(re: regex::Regex, replacement: &str) -> Self {
Self::Regex(re, replacement.to_string())
}
pub fn subvert(pattern: &str, replacement: &str) -> Self {
fn to_ada_case(input: &str) -> String {
to_train_case(input).replace('-', "_")
}
let mut items = vec![];
for function in &[
to_ada_case,
to_camel_case,
to_kebab_case,
to_pascal_case,
to_screaming_snake_case,
to_snake_case,
to_train_case,
] {
items.push((function(pattern), function(replacement)));
}
Self::Subvert(items)
}
}