use crate::core::timeline::Status;
pub(crate) trait TimelineEx<T> {
fn status(&self) -> Status;
fn value(&self) -> T;
fn begin(&self);
fn stop(&self);
fn pause(&self);
fn resume(&self);
fn reset(&self);
}
pub struct Timeline<T>(Box<dyn TimelineEx<T>>);
impl<T> Timeline<T> {
#[inline]
pub(crate) fn new<E: TimelineEx<T> + 'static>(e: E) -> Self {
Self(Box::new(e))
}
#[inline]
pub fn status(&self) -> Status {
self.0.status()
}
#[inline]
pub fn value(&self) -> T {
self.0.value()
}
#[inline]
pub fn begin(&mut self) {
self.0.begin()
}
#[inline]
pub fn stop(&mut self) {
self.0.stop()
}
#[inline]
pub fn pause(&mut self) {
self.0.pause()
}
#[inline]
pub fn resume(&mut self) {
self.0.resume()
}
#[inline]
pub fn reset(&mut self) {
self.0.resume()
}
}
impl<T> TimelineEx<T> for Timeline<T> {
#[inline]
fn status(&self) -> Status {
self.0.status()
}
#[inline]
fn value(&self) -> T {
self.0.value()
}
#[inline]
fn begin(&self) {
self.0.begin()
}
#[inline]
fn stop(&self) {
self.0.stop()
}
#[inline]
fn pause(&self) {
self.0.pause()
}
#[inline]
fn resume(&self) {
self.0.resume()
}
#[inline]
fn reset(&self) {
self.0.resume()
}
}