#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum MiddlewareExecutionScope {
#[default]
LiveHandler,
StrictReplayHandler,
ResumeHandler,
LiveEffectBoundary,
LiveSourceBoundary,
LiveSinkDeliveryBoundary,
}
impl MiddlewareExecutionScope {
pub fn is_deterministic_replay(&self) -> bool {
matches!(self, Self::StrictReplayHandler | Self::ResumeHandler)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_live_handler() {
assert_eq!(
MiddlewareExecutionScope::default(),
MiddlewareExecutionScope::LiveHandler
);
}
#[test]
fn only_handler_reconstruction_scopes_are_deterministic_replay() {
assert!(!MiddlewareExecutionScope::LiveHandler.is_deterministic_replay());
assert!(MiddlewareExecutionScope::StrictReplayHandler.is_deterministic_replay());
assert!(MiddlewareExecutionScope::ResumeHandler.is_deterministic_replay());
assert!(!MiddlewareExecutionScope::LiveEffectBoundary.is_deterministic_replay());
assert!(!MiddlewareExecutionScope::LiveSourceBoundary.is_deterministic_replay());
assert!(!MiddlewareExecutionScope::LiveSinkDeliveryBoundary.is_deterministic_replay());
}
}