use serde::{Deserialize, Serialize};
use crate::core::Sensitivity;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ContentVerdict {
pub rules: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sensitivity: Option<Sensitivity>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub refused: Option<ContentRefusal>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ContentRefusal {
pub rule: String,
pub pointer: String,
}
impl ContentVerdict {
#[must_use]
pub fn raise(verdict: Option<&Self>, declared: Sensitivity) -> Sensitivity {
joined(declared, verdict.and_then(|v| v.sensitivity))
}
}
#[must_use]
pub fn joined(declared: Sensitivity, classified: Option<Sensitivity>) -> Sensitivity {
classified.map_or(declared, |raised| declared.max(raised))
}