use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use super::metadata::Metadata;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum RulePhase {
Precondition,
Execution,
Postcondition,
}
impl RulePhase {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Precondition => "precondition",
Self::Execution => "execution",
Self::Postcondition => "postcondition",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Rule {
pub id: String,
pub rule: String,
pub target: String,
pub phase: RulePhase,
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub parameters: IndexMap<String, serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
}