pub trait Registrable: 'static {
fn node_info() -> crate::registry::node_info::NodeInfo;
fn dependencies() -> Vec<crate::graph::node_id::NodeId>;
fn register_self() -> crate::graph::node_id::NodeId
where
Self: Sized,
{
crate::graph::node_id::NodeId::of::<Self>()
}
}
#[cfg(test)]
mod tests {
use super::*;
struct TestComponent;
impl Registrable for TestComponent {
fn node_info() -> crate::registry::node_info::NodeInfo {
crate::registry::node_info::NodeInfo {
layer: crate::graph::layer::Layer::Domain,
role: crate::graph::role::Role::Entity,
type_name: "TestComponent",
module_path: module_path!(),
}
}
fn dependencies() -> Vec<crate::graph::node_id::NodeId> {
Vec::new()
}
}
#[test]
fn test_registrable_implementation() {
let info = TestComponent::node_info();
assert_eq!(info.type_name, "TestComponent");
let deps = TestComponent::dependencies();
assert_eq!(deps.len(), 0);
}
}