qualia_core_db/identity/
access_modality.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum AccessModality {
13 HumanCentric,
14 TraditionalWeb,
15}
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq)]
18pub enum DataTier {
19 NonPermissive,
21 Permissive,
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
26pub enum AccessError {
27 UnverifiedHumanCentric,
29 InsufficientTier,
31}
32
33impl AccessModality {
34 pub fn can_access(&self, tier: DataTier, is_verified: bool) -> Result<(), AccessError> {
36 match (self, tier) {
37 (_, DataTier::NonPermissive) => Ok(()),
39 (AccessModality::TraditionalWeb, DataTier::Permissive) => {
41 Err(AccessError::InsufficientTier)
42 }
43 (AccessModality::HumanCentric, DataTier::Permissive) => {
45 if is_verified {
46 Ok(())
47 } else {
48 Err(AccessError::UnverifiedHumanCentric)
49 }
50 }
51 }
52 }
53}
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn traditional_web_access() {
61 let m = AccessModality::TraditionalWeb;
62 assert_eq!(m.can_access(DataTier::NonPermissive, false), Ok(()));
63 assert_eq!(m.can_access(DataTier::NonPermissive, true), Ok(()));
64 assert_eq!(
66 m.can_access(DataTier::Permissive, false),
67 Err(AccessError::InsufficientTier)
68 );
69 assert_eq!(
70 m.can_access(DataTier::Permissive, true),
71 Err(AccessError::InsufficientTier)
72 );
73 }
74
75 #[test]
76 fn human_centric_access() {
77 let m = AccessModality::HumanCentric;
78 assert_eq!(m.can_access(DataTier::NonPermissive, false), Ok(()));
79 assert_eq!(m.can_access(DataTier::Permissive, true), Ok(()));
81 assert_eq!(
82 m.can_access(DataTier::Permissive, false),
83 Err(AccessError::UnverifiedHumanCentric)
84 );
85 }
86}