reactive_graph_client/schema_graphql/instances/entity_instance/
entity_instance_definition.rs

1use crate::ExtensionDefinition;
2use crate::PropertyInstanceDefinition;
3use crate::schema_graphql::scalar::UUID;
4use reactive_graph_graph::EntityInstance;
5use reactive_graph_graph::EntityInstances;
6use reactive_graph_graph::NamespacedTypeGetter;
7use typed_builder::TypedBuilder;
8
9#[derive(cynic::InputObject, Debug, TypedBuilder)]
10#[cynic(
11    schema_path = "../../schema/graphql/reactive-graph-schema.graphql",
12    schema_module = "crate::schema_graphql::schema"
13)]
14pub struct EntityInstanceDefinition {
15    pub namespace: String,
16    pub type_name: String,
17    pub id: UUID,
18    pub description: String,
19    pub properties: Vec<PropertyInstanceDefinition>,
20    pub extensions: Vec<ExtensionDefinition>,
21}
22
23impl From<EntityInstance> for EntityInstanceDefinition {
24    fn from(entity_instance: EntityInstance) -> Self {
25        let ty = entity_instance.ty.clone();
26        let properties = entity_instance
27            .properties
28            .into_iter()
29            .map(|(name, value)| PropertyInstanceDefinition { name, value })
30            .collect();
31        let extensions = entity_instance.extensions.into_iter().map(|(_, extension)| extension.into()).collect();
32        EntityInstanceDefinition {
33            namespace: ty.namespace(),
34            type_name: ty.type_name(),
35            id: UUID(entity_instance.id),
36            description: entity_instance.description.clone(),
37            properties,
38            extensions,
39        }
40    }
41}
42
43pub struct EntityInstanceDefinitions(pub Vec<EntityInstanceDefinition>);
44
45impl EntityInstanceDefinitions {
46    pub fn new() -> Self {
47        Self(Vec::new())
48    }
49}
50
51impl From<EntityInstanceDefinitions> for Vec<EntityInstanceDefinition> {
52    fn from(entity_instances: EntityInstanceDefinitions) -> Self {
53        entity_instances.0.into_iter().collect()
54    }
55}
56
57impl From<EntityInstances> for EntityInstanceDefinitions {
58    fn from(entity_instances: EntityInstances) -> Self {
59        EntityInstanceDefinitions(
60            entity_instances
61                .iter()
62                .map(|p| {
63                    let entity_instance = p.value().clone();
64                    entity_instance.into()
65                    // let ty = entity_instance.ty.clone();
66                    // let properties = entity_instance
67                    //     .properties
68                    //     .into_iter()
69                    //     .map(|(name, value)| PropertyInstanceDefinition { name, value })
70                    //     .collect();
71                    // let extensions = entity_instance.extensions.into_iter().map(|(_, extension)| extension.into()).collect();
72                    // EntityInstanceDefinition {
73                    //     namespace: ty.namespace(),
74                    //     type_name: ty.type_name(),
75                    //     id: UUID(*p.key()),
76                    //     description: entity_instance.description.clone(),
77                    //     properties,
78                    //     extensions,
79                    // }
80                })
81                .collect(),
82        )
83    }
84}
85
86impl Default for EntityInstanceDefinitions {
87    fn default() -> Self {
88        Self::new()
89    }
90}