use std::rc::Rc;
pub type StringSplitter = Rc<dyn Fn(&str) -> Vec<String>>;
pub type SequenceCallback = Rc<dyn Fn()>;
#[derive(Clone)]
pub enum SequenceElement {
Text(String),
Delay(u64),
Callback(SequenceCallback),
}
impl From<&str> for SequenceElement {
fn from(value: &str) -> Self {
Self::Text(value.to_string())
}
}
impl From<String> for SequenceElement {
fn from(value: String) -> Self {
Self::Text(value)
}
}
impl From<u64> for SequenceElement {
fn from(value: u64) -> Self {
Self::Delay(value)
}
}
impl From<usize> for SequenceElement {
fn from(value: usize) -> Self {
Self::Delay(value as u64)
}
}
impl<F> From<F> for SequenceElement
where
F: Fn() + 'static,
{
fn from(value: F) -> Self {
Self::Callback(Rc::new(value))
}
}