vecgraph_proto/traits/
edge_traits.rs1use crate::{Edge, EdgeWithVector};
2use vecgraph_core::VecGraphError;
3
4impl From<Edge> for vecgraph_core::Edge {
5 fn from(proto: Edge) -> Self {
6 vecgraph_core::Edge {
7 id: proto.id.into(),
8 source_node_id: proto.source_node_id.into(),
9 target_node_id: proto.target_node_id.into(),
10 kind: proto.kind,
11 content: proto.content,
12 metadata: proto
13 .metadata
14 .and_then(|bytes| serde_json::from_slice(&bytes).ok()),
15 }
16 }
17}
18
19impl From<vecgraph_core::Edge> for Edge {
20 fn from(core: vecgraph_core::Edge) -> Self {
21 Edge {
22 id: core.id.0,
23 source_node_id: core.source_node_id.0,
24 target_node_id: core.target_node_id.0,
25 kind: core.kind,
26 content: core.content,
27 metadata: core
28 .metadata
29 .map(|m| serde_json::to_vec(&m).unwrap_or_default()),
30 }
31 }
32}
33
34impl TryFrom<EdgeWithVector> for vecgraph_core::EdgeWithVector {
35 type Error = VecGraphError;
36
37 fn try_from(proto: EdgeWithVector) -> Result<Self, Self::Error> {
38 let edge = proto
39 .edge
40 .ok_or_else(|| VecGraphError::Other("EdgeWithVector missing edge field".into()))?;
41
42 Ok(vecgraph_core::EdgeWithVector {
43 edge: edge.into(),
44 vector: proto.vectors,
45 })
46 }
47}
48
49impl TryFrom<vecgraph_core::EdgeWithVector> for EdgeWithVector {
50 type Error = VecGraphError;
51
52 fn try_from(core: vecgraph_core::EdgeWithVector) -> Result<Self, Self::Error> {
53 Ok(EdgeWithVector {
54 edge: Some(core.edge.into()),
55 vectors: core.vector,
56 })
57 }
58}