mod file;
#[cfg(feature = "grpc")]
mod grpc;
#[cfg(feature = "http")]
mod http;
#[cfg(any(feature = "http", feature = "grpc"))]
mod sync;
pub use file::FileProvider;
#[cfg(feature = "grpc")]
pub use grpc::{GrpcProvider, GrpcProviderConfig};
#[cfg(feature = "http")]
pub use http::{ContentType, HttpProvider, HttpProviderConfig};
use std::sync::Arc;
use crate::error::PolicyError;
use crate::policy::Policy;
use crate::registry::PolicyStatsSnapshot;
pub type PolicyCallback = Arc<dyn Fn(Vec<Policy>) + Send + Sync>;
pub type StatsCollector = Arc<dyn Fn() -> Vec<(String, PolicyStatsSnapshot)> + Send + Sync>;
pub trait PolicyProvider: Send + Sync {
fn subscribe(&self, callback: PolicyCallback) -> Result<(), PolicyError>;
fn set_stats_collector(&self, _collector: StatsCollector) {}
}