pub(crate) mod config;
pub(crate) mod get_collision_id;
pub(crate) mod get_collisions;
pub(crate) mod tw_merge_override;
pub(crate) mod validators;
pub use config::*;
pub use tw_merge_override::tw_merge_override;
#[macro_export]
macro_rules! tw_merge {
($($item:expr),+ $(,)?) => {{
let joined = $crate::tw_join!($($item),+);
$crate::merge::merge_classes(joined.as_str())
}};
}
#[inline]
pub fn merge_classes(class: impl AsRef<str>) -> String {
tw_merge_slice_options(&[class.as_ref()], Default::default())
}
#[inline]
pub fn tw_merge_slice(class: &[&str]) -> String {
tw_merge_slice_options(class, Default::default())
}
#[inline]
pub fn tw_merge_options(class: impl AsRef<str>, options: MergeOptions) -> String {
tw_merge_override::tw_merge_override(&[class.as_ref()], options, |_: &[&str], _: Option<&str>| None, |_: &str| None)
}
#[inline]
pub fn tw_merge_slice_options(class: &[&str], options: MergeOptions) -> String {
tw_merge_override::tw_merge_override(class, options, |_: &[&str], _: Option<&str>| None, |_: &str| None)
}
pub trait CollisionIdFn {
fn apply(&self, elements: &[&str], arbitrary: Option<&str>) -> Option<&'static str>;
}
impl<F> CollisionIdFn for F
where
F: Fn(&[&str], Option<&str>) -> Option<&'static str> + 'static,
{
fn apply(&self, elements: &[&str], arbitrary: Option<&str>) -> Option<&'static str> {
self(elements, arbitrary)
}
}
pub trait GetCollisionsFn {
fn apply(&self, collision_id: &str) -> Option<Vec<&'static str>>;
}
impl<F> GetCollisionsFn for F
where
F: Fn(&str) -> Option<Vec<&'static str>>,
{
fn apply(&self, collision_id: &str) -> Option<Vec<&'static str>> {
self(collision_id)
}
}