in bistro/thrift/ThriftConversion.cpp [73:128]
dynamic toDynamic(const cpp2::BistroJobConfig& c) {
dynamic filters_obj = dynamic::object;
dynamic resources_obj = dynamic::object;
for (const auto& pair : *c.filters_ref()) {
filters_obj[pair.first] = toDynamic(pair.second);
}
for (const auto& pair : *c.resources_ref()) {
resources_obj[pair.first] = pair.second;
}
dynamic config =
dynamic::object("name", *c.name_ref())("enabled", *c.enabled_ref())(
"owner", *c.owner_ref())("config", folly::parseJson(*c.config_ref()))(
"priority", *c.priority_ref());
if (!filters_obj.empty()) {
config["filters"] = filters_obj;
}
if (c.killOrphanTasksAfterSec_ref()) {
config["kill_orphan_tasks_after_sec"] =
c.killOrphanTasksAfterSec_ref().value_unchecked();
} else {
config["kill_orphan_tasks_after_sec"] = false;
}
config[kTaskSubprocess] =
taskSubprocessOptionsToDynamic(*c.taskSubprocessOptions_ref());
config[kKillSubprocess] = killRequestToDynamic(*c.killRequest_ref());
if (*c.versionID_ref() != -1) {
config["version_id"] = *c.versionID_ref();
}
if (!c.levelForHostPlacement_ref()->empty()) {
config["level_for_host_placement"] = *c.levelForHostPlacement_ref();
}
if (!c.hostPlacement_ref()->empty()) {
config["host_placement"] = *c.hostPlacement_ref();
}
if (!resources_obj.empty()) {
config["resources"] = resources_obj;
}
if (!c.error_ref()->empty()) {
config["errors"] = folly::parseJson(*c.error_ref());
}
if (!c.backoffValues_ref()->empty()) {
config["backoff"] =
dynamic(c.backoffValues_ref()->begin(), c.backoffValues_ref()->end());
if (*c.backoffRepeat_ref()) {
config["backoff"].push_back("repeat");
}
}
if (!c.dependsOn_ref()->empty()) {
config["depends_on"] =
dynamic(c.dependsOn_ref()->begin(), c.dependsOn_ref()->end());
}
if (!c.levelForTasks_ref()->empty()) {
config["level_for_tasks"] = *c.levelForTasks_ref();
}
return config;
}