#![expect(
clippy::disallowed_types,
reason = "`Any` is required here as the dynamic-dispatch escape hatch the broker uses to downcast `Box<dyn EngineRequirement>` to each engine's concrete `Req` type; a closed enum was rejected because it would force every adapter to transitively depend on every engine crate (~20 planned)."
)]
use core::any::Any;
use core::fmt::Debug;
#[expect(
clippy::module_name_repetitions,
reason = "`EngineRequirement` is the canonical trait name used by the architecture plan and across adapter + broker call sites; renaming it loses that anchor."
)]
pub trait EngineRequirement: Any + Debug + Send + Sync {
fn engine_id(&self) -> &'static str;
fn as_any(&self) -> &dyn Any;
}