reactive_graph_dynamic_graph_impl/interface/
component.rs1use async_graphql::dynamic::Interface;
2use async_graphql::dynamic::SchemaBuilder;
3
4use crate::field::component_id_field;
5use crate::field::component_property_field;
6use crate::interface::entity::get_entity_interface;
7use crate::interface::relation::get_relation_interface;
8use crate::object::types::DynamicGraphTypeDefinition;
9use reactive_graph_dynamic_graph_api::SchemaBuilderContext;
10use reactive_graph_graph::Component;
11
12pub fn get_interfaces(mut schema: SchemaBuilder, context: &SchemaBuilderContext) -> SchemaBuilder {
13 schema = schema.register(get_entity_interface());
14 schema = schema.register(get_relation_interface());
15 for (_, component) in context.component_manager.get_all() {
16 schema = schema.register(get_component_interface(component.clone()));
17 }
18 schema
19}
20
21pub fn get_component_interface(component: Component) -> Interface {
22 let dy_ty = DynamicGraphTypeDefinition::from(&component.ty);
23 let mut interface = Interface::new(dy_ty.to_string())
24 .description(&component.description)
25 .field(component_id_field(&component.ty));
26 for field in component.properties.iter() {
27 interface = interface.field(component_property_field(field.value()));
28 }
29 interface
30}