1use super::{
2 super::{data::*, store::*},
3 instance::*,
4 utils::*,
5};
6
7use {
8 depiction::*,
9 std::{collections::*, io},
10};
11
12#[derive(Clone, Debug)]
18pub struct Edge {
19 pub instance: Instance,
21
22 pub source_vertex_id: ID,
24
25 pub target_vertex_id: ID,
27}
28
29impl Edge {
30 pub fn into_expression<'own, StoreT>(self, embedded: bool, store: &'own StoreT) -> Result<Expression, StoreError>
32 where
33 StoreT: Store,
34 {
35 let mut map = BTreeMap::default();
36
37 self.instance.into_expression(&mut map, embedded, store)?;
38
39 if !embedded {
40 map.insert("source-vertex-id".into(), self.source_vertex_id.to_string().into());
41 }
42
43 map.insert("target-vertex-id".into(), self.target_vertex_id.to_string().into());
44
45 Ok(map.into())
46 }
47
48 pub fn to_depict<'own, StoreT>(&'own self, store: &'own StoreT) -> DepictEdge<'own, StoreT>
50 where
51 StoreT: Store,
52 {
53 DepictEdge { edge: self, store }
54 }
55}
56
57pub struct DepictEdge<'own, StoreT>
63where
64 StoreT: Store,
65{
66 edge: &'own Edge,
67 store: &'own StoreT,
68}
69
70impl<'own, StoreT> Depict for DepictEdge<'own, StoreT>
71where
72 StoreT: Store,
73{
74 fn depict<WriteT>(&self, writer: &mut WriteT, context: &DepictionContext) -> io::Result<()>
75 where
76 WriteT: io::Write,
77 {
78 context.theme.write_heading(writer, "Edge")?;
79 depict_id("id", Some(&self.edge.instance.id), false, writer, context)?;
80 depict_id("origin_template_id", self.edge.instance.origin_template_id.as_ref(), false, writer, context)?;
81 depict_metadata(&self.edge.instance.metadata, false, writer, context)?;
82 depict_classes(&self.edge.instance.class_ids, self.store, writer, context)?;
83 depict_properties("properties", &self.edge.instance.properties, self.store, false, writer, context)?;
84 depict_id("target_vertex_id", Some(&self.edge.target_vertex_id), true, writer, context)
85 }
86}