reactive_graph_graphql_schema/mutation/instances/
relation_instance_id.rs

1use std::fmt;
2
3use async_graphql::*;
4use uuid::Uuid;
5
6use reactive_graph_graph::RelationInstanceId;
7use reactive_graph_graph::RelationInstanceTypeId;
8use reactive_graph_graph::TYPE_ID_TYPE_SEPARATOR;
9
10/// The primary key of a relation instance consists of the outbound id, the
11/// type name, the inbound id and an instance_id.
12#[derive(Debug, Clone, InputObject)]
13#[graphql(name = "RelationInstanceIdDefinition")]
14pub struct GraphQLRelationInstanceId {
15    /// The id of the outbound entity instance.
16    pub outbound_id: Uuid,
17
18    /// The namespace.
19    pub namespace: String,
20
21    /// The name of the relation type.
22    pub type_name: String,
23
24    /// The instance id.
25    #[graphql(default)]
26    pub instance_id: String,
27
28    /// The id of the inbound entity instance.
29    pub inbound_id: Uuid,
30}
31
32impl GraphQLRelationInstanceId {
33    pub fn ty(&self) -> RelationInstanceTypeId {
34        RelationInstanceTypeId::new_from_type_unique_for_instance_id(&self.namespace, &self.type_name, &self.instance_id)
35    }
36}
37
38impl fmt::Display for GraphQLRelationInstanceId {
39    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40        write!(
41            f,
42            "{}--{}{}{}{}{}--{}",
43            self.outbound_id, self.namespace, &TYPE_ID_TYPE_SEPARATOR, self.type_name, TYPE_ID_TYPE_SEPARATOR, self.instance_id, self.outbound_id
44        )
45    }
46}
47
48impl From<GraphQLRelationInstanceId> for RelationInstanceId {
49    fn from(relation_instance_id: GraphQLRelationInstanceId) -> Self {
50        RelationInstanceId::new(relation_instance_id.outbound_id, relation_instance_id.ty().clone(), relation_instance_id.inbound_id)
51    }
52}
53
54impl From<&GraphQLRelationInstanceId> for RelationInstanceId {
55    fn from(relation_instance_id: &GraphQLRelationInstanceId) -> Self {
56        RelationInstanceId::new(relation_instance_id.outbound_id, relation_instance_id.ty().clone(), relation_instance_id.inbound_id)
57    }
58}