use std::borrow::Cow;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Hydrate {
Visible,
VisibleWith(Cow<'static, str>),
Idle,
Interaction,
InteractionOn(&'static [&'static str]),
Media(Cow<'static, str>),
}
impl Hydrate {
#[must_use]
pub fn visible_with(root_margin: impl Into<Cow<'static, str>>) -> Hydrate {
Hydrate::VisibleWith(root_margin.into())
}
#[must_use]
pub fn media(query: impl Into<Cow<'static, str>>) -> Hydrate {
Hydrate::Media(query.into())
}
#[must_use]
pub fn attribute(&self) -> Cow<'static, str> {
match self {
Hydrate::Visible => Cow::Borrowed("visible"),
Hydrate::VisibleWith(margin) => Cow::Owned(format!("visible:{margin}")),
Hydrate::Idle => Cow::Borrowed("idle"),
Hydrate::Interaction | Hydrate::InteractionOn([]) => Cow::Borrowed("interaction"),
Hydrate::InteractionOn(events) => {
Cow::Owned(format!("interaction:{}", events.join(" ")))
}
Hydrate::Media(query) => Cow::Owned(format!("media:{query}")),
}
}
}