1use std::collections::HashMap;
4
5#[cfg(feature = "schemars")]
6use schemars::JsonSchema;
7
8use crate::Value;
9
10#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)]
12#[cfg_attr(feature = "schemars", derive(JsonSchema))]
13pub struct EncodedGraph
14{
15 pub nodes: Vec<(String, String, HashMap<String, Value>)>,
17 pub relationships: Vec<(String, String, String, HashMap<String, Value>)>,
19}
20
21impl EncodedGraph {}
22
23#[cfg(test)]
24mod tests
25{
26 use super::EncodedGraph;
27
28 #[test]
29 fn test_deserialization()
30 {
31 let eg: EncodedGraph = serde_json::from_str(
32 r#"{
33 "nodes": [["paul", "Person", {"age": 32, "occupation": "software engineer", "name": "Paul"}], ["josh", "Person", {"occupation": "chef", "name": "Josh"}], ["liu_wang", "Person", {"age": 40, "name": "Liu Wang"}], ["blue_dragon", "Restaurant", {}]],
34 "relationships": [["paul", "is_friend_of", "liu_wang", {}], ["josh", "works_at", "blue_dragon", {}], ["paul", "boyfriend", "josh", {}]]
35 }"#,
36 ).unwrap();
37 assert_eq!(eg.nodes.len(), 4);
38 assert_eq!(eg.relationships.len(), 3);
39 }
40 #[test]
41 fn test_serialization()
42 {
43 let eg: EncodedGraph = serde_json::from_str(
44 r#"{
45 "nodes": [["paul", "Person", {"name": "Paul"}], ["josh", "Person", {"name": "Josh"}], ["liu_wang", "Person", {"name": "Liu Wang"}], ["blue_dragon", "Restaurant", {}]],
46 "relationships": [["paul", "is_friend_of", "liu_wang", {}], ["josh", "works_at", "blue_dragon", {}], ["paul", "boyfriend", "josh", {}]]
47 }"#,
48 ).unwrap();
49 let txt = serde_json::to_string(&eg).unwrap();
50 assert_eq!(
51 txt,
52 r#"{"nodes":[["paul","Person",{"name":"Paul"}],["josh","Person",{"name":"Josh"}],["liu_wang","Person",{"name":"Liu Wang"}],["blue_dragon","Restaurant",{}]],"relationships":[["paul","is_friend_of","liu_wang",{}],["josh","works_at","blue_dragon",{}],["paul","boyfriend","josh",{}]]}"#
53 );
54 }
55}