floria/entities/
edge.rs

1use super::{
2    super::{data::*, store::*},
3    instance::*,
4    utils::*,
5};
6
7use {
8    depiction::*,
9    std::{collections::*, io},
10};
11
12//
13// Edge
14//
15
16/// Edge.
17#[derive(Clone, Debug)]
18pub struct Edge {
19    /// Instance.
20    pub instance: Instance,
21
22    /// Source vertex ID.
23    pub source_vertex_id: ID,
24
25    /// Target vertex ID.
26    pub target_vertex_id: ID,
27}
28
29impl Edge {
30    /// Into expression.
31    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    /// To [Depict].
49    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
57//
58// DepictEdge
59//
60
61/// Depict edge.
62pub 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}