std::string code_generate_struct_constructor()

in src/struct_pb/tools/struct_code_generator.hpp [38:172]


std::string code_generate_struct_constructor(
    const std::string &struct_name, const std::vector<struct_token> lists,
    bool add_optional) {
  std::string result = struct_name + "(";
  int i = 0;
  int list_size = lists.size() - 1;
  for (auto it = lists.begin(); it != lists.end(); it++) {
    if (it->type == struct_token_type::pod) {
      if (it->lable == lable_type::lable_repeated) {
        result.append("std::vector<");
        result.append(it->type_name);
        result.append("> ");
        result += parameter_value[i];
      }
      else {
        result.append(it->type_name);
        result.append(" ");
        result += parameter_value[i];
      }
      if (i != list_size)
        result.append(", ");
      i++;
    }
    else if (it->type == struct_token_type::proto_string) {
      if (it->lable == lable_type::lable_repeated) {
        if (add_optional) {
          result.append("std::optional<");
        }
        result.append("std::vector<std::string>");
        if (add_optional) {
          result.append("> ");
        }
        result += parameter_value[i];
      }
      else {
        if (add_optional) {
          result.append("std::optional<");
        }

        result.append("std::");
        result.append(it->type_name);
        if (add_optional) {
          result.append(">");
        }
        result.append(" ");
        result += parameter_value[i];
      }
      if (i != list_size)
        result.append(", ");
      i++;
    }
    else if (it->type == struct_token_type::enum_type) {
      // enum no repeated type
      result.append(it->type_name);
      result.append(" ");
      result += parameter_value[i];
      if (i != list_size)
        result.append(", ");
      i++;
    }
    else {
      if (it->lable == lable_type::lable_repeated) {
        if (add_optional) {
          result.append("std::optional<");
        }

        result.append("std::vector<");

        result.append(it->type_name);
        result.append(">");

        if (add_optional) {
          result.append("> ");
        }

        result += parameter_value[i];
      }
      else {
        if (add_optional) {
          result.append("std::optional<");
        }
        result.append(it->type_name);
        if (add_optional) {
          result.append(">");
        }
        result.append(" ");
        result += parameter_value[i];
      }
      if (i != list_size)
        result.append(", ");
      i++;
    }
  }
  result.append(") : ");

  int j = 0;
  for (auto ll : lists) {
    if (ll.type == struct_token_type::pod ||
        ll.type == struct_token_type::message ||
        ll.type == struct_token_type::enum_type) {
      result.append(ll.var_name);
      result.append("(");
      if (ll.lable == lable_type::lable_repeated) {
        result.append("std::move(");
        result += parameter_value[j];
        result.append(")");
        if (j != list_size)
          result.append("), ");
        else
          result.append(") {}");
      }
      else {
        result += parameter_value[j];
        if (j != list_size)
          result.append("), ");
        else
          result.append(") {}");
      }
    }
    else if (ll.type == struct_token_type::proto_string) {
      result.append(ll.var_name);
      result.append("(");
      result.append("std::move(");
      result += parameter_value[j];
      result.append(")");
      if (j != list_size)
        result.append("), ");
      else
        result.append(") {}");
    }
    j++;
  }
  result.append("\n");
  return result;
}