dynamic toDynamic()

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;
}