use crate::features::Domain;
use crate::rules::{claim::SourceMetadata, condition::Condition, effect::Effect};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct RuleMetadata {
id: String,
domain: Domain,
source: SourceMetadata,
}
impl RuleMetadata {
pub fn new(id: impl Into<String>, domain: Domain, source: SourceMetadata) -> Self {
Self {
id: id.into(),
domain,
source,
}
}
pub fn id(&self) -> &str {
&self.id
}
pub const fn domain(&self) -> Domain {
self.domain
}
pub const fn source(&self) -> &SourceMetadata {
&self.source
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Rule {
metadata: RuleMetadata,
condition: Condition,
effect: Effect,
}
impl Rule {
pub const fn new(metadata: RuleMetadata, condition: Condition, effect: Effect) -> Self {
Self {
metadata,
condition,
effect,
}
}
pub const fn metadata(&self) -> &RuleMetadata {
&self.metadata
}
pub const fn condition(&self) -> &Condition {
&self.condition
}
pub const fn effect(&self) -> &Effect {
&self.effect
}
}