use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct GateCapability {
pub id: String,
}
impl GateCapability {
pub fn inspect() -> Self {
Self {
id: "dsk.inspect".into(),
}
}
pub fn reconstruct() -> Self {
Self {
id: "dsk.reconstruct".into(),
}
}
pub fn export_plaintext() -> Self {
Self {
id: "dsk.capability.export.plaintext".into(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatePolicy {
pub allowed: Vec<String>,
}
impl GatePolicy {
pub fn allows(&self, cap: &GateCapability) -> bool {
self.allowed.iter().any(|a| a == &cap.id)
}
pub fn permissive_dev() -> Self {
Self {
allowed: vec![
"dsk.inspect".into(),
"dsk.reconstruct".into(),
"dsk.capability.export.plaintext".into(),
],
}
}
}