use camel_api::CamelError;
pub trait ConfigCheck: Send + Sync {
fn name(&self) -> &'static str;
fn description(&self) -> &'static str;
fn run(&self) -> Result<(), CamelError>;
}
#[derive(Debug, Default, Clone)]
pub struct StartupValidationReport {
pub failures: Vec<String>,
}
impl StartupValidationReport {
pub fn is_ok(&self) -> bool {
self.failures.is_empty()
}
}
pub fn run_startup_validation() -> Result<StartupValidationReport, CamelError> {
Ok(StartupValidationReport::default())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn skeleton_run_returns_empty_ok_report() {
let report = run_startup_validation().expect("skeleton must return Ok");
assert!(report.is_ok());
assert!(report.failures.is_empty());
}
#[test]
fn trait_is_object_safe_and_dispatchable() {
struct AlwaysOk;
impl ConfigCheck for AlwaysOk {
fn name(&self) -> &'static str {
"always-ok"
}
fn description(&self) -> &'static str {
"always-ok skeleton check"
}
fn run(&self) -> Result<(), CamelError> {
Ok(())
}
}
let check: Box<dyn ConfigCheck> = Box::new(AlwaysOk);
assert_eq!(check.name(), "always-ok");
assert!(check.run().is_ok());
}
}