use std::borrow::Cow;
use get_size::*;
use r3bl_rs_utils_core::*;
use serde::*;
use crate::*;
pub fn colorize_to_styled_texts(
lolcat: &mut Lolcat,
input: &UnicodeString,
) -> StyledTexts {
lolcat.colorize_to_styled_texts(input)
}
pub fn lolcat_each_char_in_unicode_string(
unicode_string: &UnicodeString,
lolcat: Option<&mut Lolcat>,
) -> StyledTexts {
let mut saved_orig_speed = None;
let mut my_lolcat: Cow<Lolcat> = match lolcat {
Some(lolcat_arg) => {
saved_orig_speed = Some(lolcat_arg.color_wheel_control.color_change_speed);
lolcat_arg.color_wheel_control.color_change_speed = ColorChangeSpeed::Rapid;
Cow::Borrowed(lolcat_arg)
}
None => {
let lolcat_temp = LolcatBuilder::new()
.set_color_change_speed(ColorChangeSpeed::Rapid)
.build();
Cow::Owned(lolcat_temp)
}
};
let it = my_lolcat.to_mut().colorize_to_styled_texts(unicode_string);
if let Some(orig_speed) = saved_orig_speed {
my_lolcat.to_mut().color_wheel_control.color_change_speed = orig_speed;
}
it
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, GetSize)]
pub struct LolcatBuilder {
pub color_change_speed: ColorChangeSpeed,
pub seed: f64,
pub seed_delta: f64,
pub background_mode: bool,
}
impl Default for LolcatBuilder {
fn default() -> Self {
Self {
color_change_speed: ColorChangeSpeed::Slow,
seed: 1.0,
seed_delta: 1.0,
background_mode: false,
}
}
}
impl LolcatBuilder {
pub fn new() -> Self { Self::default() }
pub fn set_background_mode(mut self, background_mode: bool) -> Self {
self.background_mode = background_mode;
self
}
pub fn set_color_change_speed(
mut self,
color_change_speed: ColorChangeSpeed,
) -> Self {
self.color_change_speed = color_change_speed;
self
}
pub fn set_seed(mut self, seed: f64) -> Self {
self.seed = seed;
self
}
pub fn set_seed_delta(mut self, seed_delta: f64) -> Self {
self.seed_delta = seed_delta;
self
}
pub fn build(self) -> Lolcat {
let mut new_lolcat = Lolcat {
seed_delta: self.seed_delta,
color_wheel_control: Default::default(),
};
new_lolcat.color_wheel_control.color_change_speed = self.color_change_speed;
new_lolcat.color_wheel_control.seed = self.seed;
new_lolcat.color_wheel_control.background_mode = self.background_mode;
new_lolcat
}
pub fn apply(&self, lolcat: &mut Lolcat) {
lolcat.color_wheel_control.color_change_speed = self.color_change_speed;
lolcat.color_wheel_control.seed = self.seed;
lolcat.seed_delta = self.seed_delta;
}
}