use std::fmt;
use serde::Serialize;
use crate::kind::Kind;
mod check;
mod lower;
pub use check::Checker;
pub use lower::{CLOUD_METADATA, CLOUD_METADATA_RULE, READ_ROOTS_RULE, lower};
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Enforcement {
pub fs: Filesystem,
pub egress: Egress,
pub secrets: Vec<BrokeredSecret>,
pub limits: Vec<ProcessLimit>,
pub decide_only: Vec<DecideOnly>,
pub losses: Vec<Loss>,
pub allowances: Vec<Allowance>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Filesystem {
pub case_insensitive: bool,
pub read: Access,
pub write: Access,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Egress {
pub net: Access,
pub fetch: Access,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Access {
pub default: Effect,
pub deny: Vec<Rule>,
pub allow: Vec<Rule>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Rule {
pub id: String,
pub list: Kind,
pub patterns: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum Effect {
Allow,
Deny,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct DecideOnly {
pub kind: String,
pub rules: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Loss {
pub kind: Kind,
pub rule: String,
pub message: String,
}
impl fmt::Display for Loss {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{} `{}`: {}", self.kind, self.rule, self.message)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Allowance {
pub kind: Kind,
pub rule: String,
pub patterns: Vec<String>,
pub message: String,
}
impl fmt::Display for Allowance {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{} `{}`: {}", self.kind, self.rule, self.message)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct BrokeredSecret {
pub id: String,
pub host: String,
pub header: String,
pub source: crate::SecretSource,
pub plain_http: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum ProcessLimit {}
#[cfg(test)]
mod tests;