use crate::Uwu;
#[derive(Copy, Clone, Default, Debug, Eq, PartialEq)]
pub struct UwuBuilder {
pub lowercase: bool,
pub expressions: bool,
pub w_replace: bool,
pub stutter: bool,
pub stutter_chance: u8,
pub emojis: bool,
pub emojis_chance: u8,
}
impl UwuBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn lowercase(&mut self) -> &mut Self {
self.lowercase = true;
self
}
pub fn expressions(&mut self) -> &mut Self {
self.expressions = true;
self
}
pub fn w_replace(&mut self) -> &mut Self {
self.w_replace = true;
self
}
pub fn stutter(&mut self, chance: u8) -> &mut Self {
self.stutter = true;
self.stutter_chance = chance;
self
}
pub fn emojis(&mut self, chance: u8) -> &mut Self {
self.emojis = true;
self.emojis_chance = chance;
self
}
pub fn build(&self) -> Uwu {
Uwu::from(self)
}
}
impl From<&UwuBuilder> for Uwu {
fn from(builder: &UwuBuilder) -> Self {
Self {
lowercase: builder.lowercase,
expressions: builder.expressions,
w_replace: builder.w_replace,
stutter: builder.stutter,
stutter_chance: builder.stutter_chance,
emojis: builder.emojis,
emojis_chance: builder.emojis_chance,
}
}
}
impl From<UwuBuilder> for Uwu {
fn from(builder: UwuBuilder) -> Self {
Self::from(&builder)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn assert_builder() {
let builder_ver = Uwu::builder()
.lowercase()
.expressions()
.w_replace()
.stutter(4)
.emojis(1)
.build();
let manual_ver = Uwu {
lowercase: true,
expressions: true,
w_replace: true,
stutter: true,
stutter_chance: 4,
emojis: true,
emojis_chance: 1,
};
assert_eq!(builder_ver, manual_ver);
}
}