#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct EmitStrategy {
kind: EmitKind,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum EmitKind {
OnWindowUpdate,
OnWindowClose,
}
impl EmitStrategy {
#[must_use]
pub fn on_window_update() -> Self {
Self {
kind: EmitKind::OnWindowUpdate,
}
}
#[must_use]
pub fn on_window_close() -> Self {
Self {
kind: EmitKind::OnWindowClose,
}
}
pub(crate) fn is_on_update(self) -> bool {
matches!(self.kind, EmitKind::OnWindowUpdate)
}
pub(crate) fn is_on_close(self) -> bool {
matches!(self.kind, EmitKind::OnWindowClose)
}
}
impl Default for EmitStrategy {
fn default() -> Self {
Self::on_window_update()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_to_on_update() {
assert!(EmitStrategy::default().is_on_update());
assert!(!EmitStrategy::default().is_on_close());
}
#[test]
fn on_window_close_is_close() {
let e = EmitStrategy::on_window_close();
assert!(e.is_on_close());
assert!(!e.is_on_update());
}
}