pub mod bundled;
mod classifier;
mod constants;
mod default;
mod endpoint;
mod http;
mod llm;
mod resolve;
pub use bundled::{
fold_score_verdict, BundledClassifierProvider, ClassifierVerdict, HttpTransport,
ResolvedClassifierConfig, StubHttpTransport, TransportRequest, TransportResponse,
UreqHttpTransport,
};
pub use classifier::ClassifierAnnotator;
pub use default::DefaultAnnotatorDispatcher;
pub use endpoint::EndpointAnnotator;
pub use llm::LlmAnnotator;
use crate::AnnotatorDispatcher;
#[cfg(feature = "opa")]
use crate::{Manifest, OpaPolicyDispatcher, OpaRegoRunner, PolicyDispatcher, RuntimeError};
use std::sync::Arc;
pub fn default_annotator_dispatcher() -> Arc<dyn AnnotatorDispatcher> {
Arc::new(DefaultAnnotatorDispatcher::new())
}
#[cfg(feature = "opa")]
pub fn default_policy_dispatcher(
manifest: &Manifest,
) -> Result<Arc<dyn PolicyDispatcher>, RuntimeError> {
for (name, policy) in &manifest.policies {
let engine = policy.engine_type();
if engine != "rego" {
return Err(RuntimeError::PolicyInvocationFailed(format!(
"default policy dispatcher supports only Rego policies; policy '{name}' uses engine '{engine}'"
)));
}
}
Ok(Arc::new(OpaPolicyDispatcher::with_runner(
OpaRegoRunner::from_environment(),
)))
}