icentral_json/
json_builder.rs1crate::ix!();
2
3#[macro_export] macro_rules! allow_twolevel_named_members {
4
5 ($($outer_type:ident [ $fn_name:ident ] $inner_type:ident [ $inner_type_constructor:ident ]);*) => {
6 $(
7 allow_twolevel_named_member!($outer_type [ $fn_name ] $inner_type [ $inner_type_constructor ] );
8 )*
9 }
10}
11
12#[macro_export] macro_rules! allow_twolevel_named_member {
26
27 ($outer_type:ident [ $fn_name:ident ] $inner_type:ident [ $inner_type_constructor:ident ]) => {
28
29 impl $outer_type {
30
31 pub fn $fn_name(parent: &str, child: &str) -> $inner_type {
32
33 let parent_address = betweenness_json_builder::ParentAddress::$outer_type {
34 name: parent.to_owned()
35 };
36
37 let child_address = betweenness_json_builder::ChildAddress::$inner_type {
38 name: child.to_owned()
39 };
40
41 let name = BetweennessJsonBuilder::new(
42 parent_address,
43 child_address
44 ).to_json();
45
46 $inner_type::$inner_type_constructor(&name)
47 }
48 }
49 }
50}
51
52pub mod betweenness_json_builder {
53
54 use super::*;
55
56 #[derive(Serialize)]
57 pub enum ParentAddress {
58 GraphHash { name: String },
59 Graph { name: String },
60 SubGraph { name: String },
61 MinimumUnionCycle { name: String },
62 }
63
64 #[derive(Serialize)]
65 pub enum ChildAddress {
66 PathCounts { name: String },
67 Edges { name: String },
68 NeighborsMap { name: String },
69 ParentsMap { name: String },
70 SigmaMap { name: String },
71 DeltaMap { name: String },
72 VisitMarkers { name: String },
73 PairDependencies { name: String },
74 DistanceMap { name: String },
75 NodeIdStack { name: String },
76 NodeIdQueue { name: String },
77 }
78}
79
80#[derive(Serialize)]
81pub struct BetweennessJsonBuilder {
82 parent_address: betweenness_json_builder::ParentAddress,
83 child_address: betweenness_json_builder::ChildAddress,
84}
85
86impl BetweennessJsonBuilder {
87
88 pub fn new(
89 parent_address: betweenness_json_builder::ParentAddress,
90 child_address: betweenness_json_builder::ChildAddress) -> Self
91 {
92 BetweennessJsonBuilder {
93 parent_address,
94 child_address
95 }
96 }
97
98 pub fn to_json(&self) -> String {
99 serde_json::to_string(self).unwrap()
100 }
101}
102
103#[test] fn test_betweenness_json_builder() {
104
105 setup_test_logger![];
106
107 let parent = betweenness_json_builder::ParentAddress::GraphHash { name: "gh".to_owned() };
108 let child = betweenness_json_builder::ChildAddress::PathCounts { name: "pc".to_owned() };
109
110 let builder = BetweennessJsonBuilder::new(parent,child);
111
112 debug!("{}", builder.to_json());
113}