qualia_core_db/entity_view/
circumstance.rs1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
10#[serde(rename_all = "snake_case")]
11#[repr(u8)]
12pub enum EnvironmentKind {
13 #[default]
14 Unspecified = 0,
15 PrivateSanctuary = 1,
16 Workplace = 2,
17 PublicCafe = 3,
18 ClinicalCare = 4,
19 Education = 5,
20 FieldMobile = 6,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
25#[serde(rename_all = "snake_case")]
26#[repr(u8)]
27pub enum EvaluatoryFocus {
28 #[default]
29 Open = 0,
30 CareSafety = 1,
31 WorkDelivery = 2,
32 Learning = 3,
33 SocialCommons = 4,
34 LegalProcess = 5,
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
41pub struct Circumstance {
42 pub role: String,
44 pub audience: String,
46 pub quorum: u8,
48 pub environment: EnvironmentKind,
49 pub evaluatory: EvaluatoryFocus,
50 pub place_hint: u64,
52}
53
54impl Circumstance {
55 pub fn private_sanctuary() -> Self {
56 Self {
57 role: "principal".into(),
58 audience: "self".into(),
59 quorum: 1,
60 environment: EnvironmentKind::PrivateSanctuary,
61 evaluatory: EvaluatoryFocus::Open,
62 place_hint: 0,
63 }
64 }
65
66 pub fn workplace_employee() -> Self {
67 Self {
68 role: "employee".into(),
69 audience: "employer_org".into(),
70 quorum: 1,
71 environment: EnvironmentKind::Workplace,
72 evaluatory: EvaluatoryFocus::WorkDelivery,
73 place_hint: 0,
74 }
75 }
76
77 pub fn prefers_reduced_private_chrome(&self) -> bool {
79 matches!(
80 self.environment,
81 EnvironmentKind::Workplace | EnvironmentKind::PublicCafe
82 ) || self.audience == "employer_org"
83 || self.audience == "public"
84 }
85}
86
87#[cfg(test)]
88mod tests {
89 use super::*;
90
91 #[test]
92 fn workplace_prefers_reduced_private() {
93 let c = Circumstance::workplace_employee();
94 assert!(c.prefers_reduced_private_chrome());
95 assert!(!Circumstance::private_sanctuary().prefers_reduced_private_chrome());
96 }
97}