use affinidi_messaging_core::RelationshipRequest;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ControlDecision {
Accept,
Cancel(&'static str),
Nothing,
}
pub fn decide_control(request: RelationshipRequest, reply_expected: bool) -> ControlDecision {
match request {
RelationshipRequest::Invite => ControlDecision::Accept,
RelationshipRequest::Accept => ControlDecision::Nothing,
RelationshipRequest::Cancel => {
if reply_expected {
ControlDecision::Cancel("the peer cancelled a mutual relationship (§7.3)")
} else {
ControlDecision::Nothing
}
}
_ => ControlDecision::Nothing,
}
}
#[cfg(test)]
mod tests {
use super::{ControlDecision, decide_control};
use affinidi_messaging_core::RelationshipRequest;
#[test]
fn an_invite_is_accepted_and_the_acl_gate_stays_at_the_task_layer() {
assert_eq!(
decide_control(RelationshipRequest::Invite, false),
ControlDecision::Accept,
);
}
#[test]
fn an_accept_is_not_answered() {
assert_eq!(
decide_control(RelationshipRequest::Accept, false),
ControlDecision::Nothing
);
}
#[test]
fn a_cancellation_is_answered_only_when_the_relationship_was_mutual() {
assert_eq!(
decide_control(RelationshipRequest::Cancel, false),
ControlDecision::Nothing
);
assert!(matches!(
decide_control(RelationshipRequest::Cancel, true),
ControlDecision::Cancel(_)
));
}
}