use serde_yaml::Value as YamlValue;
use super::types::GovernancePolicy;
pub type PolicyFactory =
fn(&YamlValue) -> Result<Box<dyn GovernancePolicy>, PolicyConfigurationError>;
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
#[error("{0}")]
pub struct PolicyConfigurationError(pub String);
#[derive(Debug, Clone, Copy)]
pub struct PolicyRegistration {
pub id: &'static str,
pub factory: PolicyFactory,
}
inventory::collect!(PolicyRegistration);
#[doc(hidden)]
pub use inventory;
#[macro_export]
macro_rules! register_governance_policy {
($id:expr, $factory:expr) => {
$crate::policy::registry::inventory::submit! {
$crate::policy::PolicyRegistration {
id: $id,
factory: $factory,
}
}
};
}