#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum AnimationBackend {
WebRaf,
NativeClock,
TerminalPoll,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct PlatformAdapter;
impl PlatformAdapter {
pub fn detect() -> AnimationBackend {
detect_backend()
}
}
#[cfg(target_arch = "wasm32")]
fn detect_backend() -> AnimationBackend {
AnimationBackend::WebRaf
}
#[cfg(all(not(target_arch = "wasm32"), feature = "native"))]
fn detect_backend() -> AnimationBackend {
AnimationBackend::NativeClock
}
#[cfg(all(not(target_arch = "wasm32"), not(feature = "native")))]
fn detect_backend() -> AnimationBackend {
AnimationBackend::NativeClock
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn backend_detection_returns_supported_backend() {
let backend = PlatformAdapter::detect();
assert!(matches!(
backend,
AnimationBackend::WebRaf
| AnimationBackend::NativeClock
| AnimationBackend::TerminalPoll
));
}
}