9 #include "../common/JsonProcessingFunctions.hpp"
10 #include "../common/TomlProcessingFunctions.hpp"
11 #include "../common/addTargets.hpp"
17 #include <type_traits>
21 void makeConnectionsToml(brkX* brk,
const std::string& file)
24 static_assert(std::is_base_of<Broker, brkX>::value || std::is_base_of<Core, brkX>::value,
25 "broker must be Core or broker");
30 catch (
const std::invalid_argument& ia) {
34 auto conns = toml::find_or(doc,
"connections", uVal);
35 if (!conns.is_uninitialized()) {
36 auto& connArray = conns.as_array();
37 for (
const auto& conn : connArray) {
38 if (conn.is_array()) {
39 auto& connAct = conn.as_array();
40 brk->dataLink(connAct[0].as_string(), connAct[1].as_string());
42 std::string pub = getOrDefault(conn,
"publication", std::string());
44 addTargets(conn,
"targets", [brk, &pub](
const std::string& target) {
45 brk->dataLink(pub, target);
48 std::string ipt = getOrDefault(conn,
"input", std::string());
49 addTargets(conn,
"targets", [brk, &ipt](
const std::string& target) {
50 brk->dataLink(target, ipt);
56 auto filts = toml::find_or(doc,
"filters", uVal);
57 if (!filts.is_uninitialized()) {
58 auto& filtArray = filts.as_array();
59 for (
const auto& filt : filtArray) {
60 if (filt.is_array()) {
61 auto& filtAct = filt.as_array();
62 brk->addSourceFilterToEndpoint(filtAct[0].as_string(), filtAct[1].as_string());
64 std::string fname = getOrDefault(filt,
"filter", std::string());
66 auto asrc = [brk, &fname](
const std::string& ept) {
67 brk->addSourceFilterToEndpoint(fname, ept);
69 addTargets(filt,
"endpoints", asrc);
70 addTargets(filt,
"source_endpoints", asrc);
71 addTargets(filt,
"sourceEndpoints", asrc);
72 auto adst = [brk, &fname](
const std::string& ept) {
73 brk->addDestinationFilterToEndpoint(fname, ept);
75 addTargets(filt,
"dest_endpoints", adst);
76 addTargets(filt,
"destEndpoints", adst);
81 auto globals = toml::find_or(doc,
"globals", uVal);
82 if (!globals.is_uninitialized()) {
83 if (globals.is_array()) {
84 for (
auto& val : globals.as_array()) {
85 brk->setGlobal(val.as_array()[0].as_string(), val.as_array()[1].as_string());
88 for (
const auto& val : globals.as_table()) {
89 brk->setGlobal(val.first, val.second.as_string());
96 void makeConnectionsJson(brkX* brk,
const std::string& file)
98 static_assert(std::is_base_of<Broker, brkX>::value || std::is_base_of<Core, brkX>::value,
99 "broker must be Core or broker");
104 catch (
const std::invalid_argument& ia) {
108 if (doc.isMember(
"connections")) {
109 for (
const auto& conn : doc[
"connections"]) {
110 if (conn.isArray()) {
111 brk->dataLink(conn[0].asString(), conn[1].asString());
113 std::string pub = getOrDefault(conn,
"publication", std::string());
115 addTargets(conn,
"targets", [brk, &pub](
const std::string& target) {
116 brk->dataLink(pub, target);
119 std::string ipt = getOrDefault(conn,
"input", std::string());
120 addTargets(conn,
"targets", [brk, &ipt](
const std::string& target) {
121 brk->dataLink(target, ipt);
127 if (doc.isMember(
"filters")) {
128 for (
const auto& filt : doc[
"filters"]) {
129 if (filt.isArray()) {
130 brk->addSourceFilterToEndpoint(filt[0].asString(), filt[1].asString());
132 std::string fname = getOrDefault(filt,
"filter", std::string());
133 if (!fname.empty()) {
134 auto asrc = [brk, &fname](
const std::string& ept) {
135 brk->addSourceFilterToEndpoint(fname, ept);
137 addTargets(filt,
"endpoints", asrc);
138 addTargets(filt,
"source_endpoints", asrc);
139 addTargets(filt,
"sourceEndpoints", asrc);
140 auto adst = [brk, &fname](
const std::string& ept) {
141 brk->addDestinationFilterToEndpoint(fname, ept);
143 addTargets(filt,
"dest_endpoints", adst);
144 addTargets(filt,
"destEndpoints", adst);
149 if (doc.isMember(
"globals")) {
150 if (doc[
"globals"].isArray()) {
151 for (
auto& val : doc[
"globals"]) {
152 brk->setGlobal(val[0].asString(), val[1].asString());
155 auto members = doc[
"globals"].getMemberNames();
156 for (
auto& val : members) {
157 brk->setGlobal(val, doc[
"globals"][val].asString());