use crate::{
AnimationTargetId, PropertyTransition, Timing,
behavior::TransitionValueKind,
property::{PropertySpec, PropertyValueKind},
};
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct BehaviorRule<K: PropertyValueKind> {
property: PropertySpec<K>,
timing: Timing,
}
impl<K: PropertyValueKind> BehaviorRule<K> {
#[must_use]
pub fn new(property: PropertySpec<K>) -> Self {
Self {
property,
timing: Timing::default(),
}
}
#[must_use]
pub const fn with_timing(mut self, timing: Timing) -> Self {
self.timing = timing;
self
}
#[must_use]
pub const fn property(&self) -> PropertySpec<K> {
self.property
}
#[must_use]
pub const fn timing(&self) -> Timing {
self.timing
}
#[must_use]
pub fn bind(self, target: AnimationTargetId) -> PropertyTransition<K>
where
K: TransitionValueKind,
K::Inner: Copy + PartialEq,
{
PropertyTransition::from_rule(target, &self)
}
}