use crate::state::StateKey;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct PendingWorkState {
pub has_pending: bool,
}
pub struct PendingWorkKey;
impl StateKey for PendingWorkKey {
const KEY: &'static str = "__runtime.pending_work";
type Value = PendingWorkState;
type Update = bool;
fn apply(value: &mut Self::Value, update: Self::Update) {
value.has_pending = update;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_no_pending() {
let state = PendingWorkState::default();
assert!(!state.has_pending);
}
#[test]
fn update_sets_pending() {
let mut state = PendingWorkState::default();
PendingWorkKey::apply(&mut state, true);
assert!(state.has_pending);
}
#[test]
fn update_clears_pending() {
let mut state = PendingWorkState { has_pending: true };
PendingWorkKey::apply(&mut state, false);
assert!(!state.has_pending);
}
}