lean_ctx_protocol/
policy.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
5pub enum PolicyCriticality {
6 Critical,
7 High,
8 Medium,
9 Low,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13pub enum ExpiryBehavior {
14 FailClosed,
15 FailOpen,
16 GracePeriod,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21pub struct PolicyClassification {
22 pub criticality: PolicyCriticality,
23 pub expiry_behavior: ExpiryBehavior,
24 pub grace_period_seconds: u64,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub fallback_policy_ref: Option<String>,
27 pub last_known_good_allowed: bool,
28}
29
30#[cfg(test)]
31mod tests {
32 use crate::{ExpiryBehavior, PolicyClassification, PolicyCriticality};
33
34 #[test]
35 fn serialization_round_trip() {
36 let classification = PolicyClassification {
37 criticality: PolicyCriticality::Critical,
38 expiry_behavior: ExpiryBehavior::FailClosed,
39 grace_period_seconds: 0,
40 fallback_policy_ref: None,
41 last_known_good_allowed: false,
42 };
43 let json = serde_json::to_string(&classification).expect("policy should serialize");
44 let decoded = serde_json::from_str(&json).expect("policy should deserialize");
45 assert_eq!(classification, decoded);
46 }
47}