Skip to main content

vecgraph_proto/traits/
edge_traits.rs

1use 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}