use super::discovery::EntityKind;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PublishDecision {
Publish,
Suppress,
}
pub fn decide(entity: EntityKind, privacy_mode: bool) -> PublishDecision {
if privacy_mode && entity.is_biometric() {
PublishDecision::Suppress
} else {
PublishDecision::Publish
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn privacy_off_publishes_everything() {
for e in [
EntityKind::Presence,
EntityKind::HeartRate,
EntityKind::BreathingRate,
EntityKind::PoseKeypoints,
EntityKind::SomeoneSleeping,
EntityKind::PossibleDistress,
EntityKind::FallDetected,
] {
assert_eq!(decide(e, false), PublishDecision::Publish);
}
}
#[test]
fn privacy_on_suppresses_biometrics_only() {
assert_eq!(decide(EntityKind::HeartRate, true), PublishDecision::Suppress);
assert_eq!(decide(EntityKind::BreathingRate, true), PublishDecision::Suppress);
assert_eq!(decide(EntityKind::PoseKeypoints, true), PublishDecision::Suppress);
}
#[test]
fn privacy_on_keeps_non_biometric_signals() {
for e in [
EntityKind::Presence,
EntityKind::PersonCount,
EntityKind::MotionLevel,
EntityKind::Rssi,
EntityKind::ZoneOccupancy,
EntityKind::FallDetected,
EntityKind::PresenceScore,
] {
assert_eq!(decide(e, true), PublishDecision::Publish, "{:?} should not be suppressed", e);
}
}
#[test]
fn privacy_on_keeps_semantic_primitives() {
for e in [
EntityKind::SomeoneSleeping,
EntityKind::PossibleDistress,
EntityKind::RoomActive,
EntityKind::ElderlyInactivityAnomaly,
EntityKind::MeetingInProgress,
EntityKind::BathroomOccupied,
EntityKind::FallRiskElevated,
EntityKind::BedExit,
EntityKind::NoMovement,
EntityKind::MultiRoomTransition,
] {
assert_eq!(decide(e, true), PublishDecision::Publish, "{:?} should not be suppressed", e);
}
}
}