commit 9d102c1e0885384c79ae2b1e6afabf5f96300575 Author: EvilDeaaaadd Date: Thu Aug 1 02:00:09 2019 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6936990 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +**/*.rs.bk +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..715e8de --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "owoify" +version = "0.1.0" +authors = [""] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +regex = "1.2.0" +rand = "0.7.0" diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..8006180 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,49 @@ +use rand::prelude::*; +use regex::Regex; +use std::str::FromStr; + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn owo() { + let text = String::from("malfunction me mom.. t-till i break~~"); + let owoified = text.owoify(); + println!("\t\t{}", owoified); + } + #[test] + fn all_match_owo() { + let text = String::from("r l R L na Na NA ove !!"); + println!("\t\t{}", text.owoify()); + } +} + +pub trait OwOifiable { + fn owoify(&self) -> Self; +} + +impl OwOifiable for String { + fn owoify(&self) -> Self { + let mut rng = rand::thread_rng(); + let faces = ["(・`ω´・)", ";;w;;", "owo", "UwU", ">w<", "^w^"]; + let face = &format!(" {} ", faces[rng.gen_range(0, faces.len())]).to_owned(); + let pats: Vec<(&str, &str)> = vec![ + ("(?:r|l)", "w"), + ("(?:R|L)", "W"), + ("n([aeiou])", "ny$1"), + ("N([aeiou])", "Ny$1"), + ("N([AEIOU])", "Ny$1"), + ("ove", "uv"), + ("!+", face), + ]; + + let mut owoified = String::from_str(&self).unwrap(); + + for &(f, t) in &pats { + let re = Regex::new(f).unwrap(); + owoified = re.replace_all(&owoified, t).to_string(); + } + + owoified + } +}