use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MutabilityTier {
Immutable,
Monotonic,
Mutable,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Capability {
ReadSubject,
ReadRoles,
ReadTeams,
ReadClaims,
ReadPermissions,
ReadClient,
ReadWorkload,
ReadAgent,
ReadHeaders,
WriteHeaders,
ReadLabels,
AppendLabels,
ReadDelegation,
AppendDelegation,
ReadInboundCredentials,
ReadDelegatedTokens,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AccessPolicy {
Unrestricted,
CapabilityGated,
}
#[derive(Debug, Clone)]
pub struct SlotPolicy {
pub tier: MutabilityTier,
pub access: AccessPolicy,
pub read_cap: Option<Capability>,
pub write_cap: Option<Capability>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tier_serde() {
let tier = MutabilityTier::Monotonic;
let json = serde_json::to_string(&tier).unwrap();
assert_eq!(json, "\"monotonic\"");
}
#[test]
fn test_capability_serde() {
let cap = Capability::AppendLabels;
let json = serde_json::to_string(&cap).unwrap();
assert_eq!(json, "\"append_labels\"");
}
}