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