use relmath::{BinaryRelation, UnaryRelation};
fn main() {
let user_role = BinaryRelation::from_pairs([
("ann", "admin"),
("bob", "analyst"),
("bob", "reviewer"),
("cara", "guest"),
]);
let role_permission = BinaryRelation::from_pairs([
("admin", "read"),
("admin", "write"),
("admin", "deploy"),
("analyst", "read"),
("reviewer", "approve"),
("guest", "read"),
]);
let effective_permission = user_role.compose(&role_permission);
let bob = UnaryRelation::singleton("bob");
let bob_permissions = effective_permission.image(&bob);
assert!(effective_permission.contains(&"ann", &"deploy"));
assert!(bob_permissions.contains(&"approve"));
assert!(bob_permissions.contains(&"read"));
println!(
"effective permissions for bob: {:?}",
bob_permissions.to_vec()
);
}