Skip to content

Commit 4964500

Browse files
committed
Support secureString/secureBytes aliases in TL schemes.
1 parent 89cee2f commit 4964500

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

td/generate/tl_writer_cpp.cpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@ std::string TD_TL_writer_cpp::gen_fetch_class_name(const tl::tl_tree_type *tree_
157157
if (name == "Bytes") {
158158
return "TlFetchBytes<bytes>";
159159
}
160+
if (name == "SecureString") {
161+
return "TlFetchString<secure_string>";
162+
}
163+
if (name == "SecureBytes") {
164+
return "TlFetchBytes<secure_bytes>";
165+
}
160166

161167
if (name == "Vector") {
162168
assert(t->arity == 1);
@@ -348,7 +354,7 @@ std::string TD_TL_writer_cpp::gen_store_class_name(const tl::tl_tree_type *tree_
348354
assert(false);
349355
return "";
350356
}
351-
if (name == "String" || name == "Bytes") {
357+
if (name == "String" || name == "Bytes" || name == "SecureString" || name == "SecureBytes") {
352358
return "TlStoreString";
353359
}
354360

@@ -409,13 +415,13 @@ std::string TD_TL_writer_cpp::gen_type_store(const std::string &field_name, cons
409415
assert(!(t->flags & tl::FLAG_DEFAULT_CONSTRUCTOR)); // Not supported yet
410416

411417
if (name == "#" || name == "Int" || name == "Long" || name == "Int32" || name == "Int53" || name == "Int64" ||
412-
name == "Double" || name == "Bool" || name == "String" || name == "Int128" || name == "Int256" ||
413-
name == "Int512") {
418+
name == "Double" || name == "Bool" || name == "String" || name == "SecureString" || name == "Int128" ||
419+
name == "Int256" || name == "Int512") {
414420
return "s.store_field(\"" + get_pretty_field_name(field_name) + "\", " + field_name + ");";
415421
} else if (name == "True") {
416422
// currently nothing to do
417423
return "";
418-
} else if (name == "Bytes") {
424+
} else if (name == "Bytes" || name == "SecureBytes") {
419425
return "s.store_bytes_field(\"" + get_pretty_field_name(field_name) + "\", " + field_name + ");";
420426
} else if (name == "Vector") {
421427
const tl::tl_tree_type *child = static_cast<const tl::tl_tree_type *>(tree_type->children[0]);
@@ -692,7 +698,7 @@ std::string TD_TL_writer_cpp::gen_constructor_field_init(int field_num, const st
692698
}
693699
std::string move_begin;
694700
std::string move_end;
695-
if ((field_type == "bytes" || field_type.compare(0, 5, "array") == 0 ||
701+
if ((field_type == "bytes" || field_type == "secure_bytes" || field_type.compare(0, 5, "array") == 0 ||
696702
field_type.compare(0, 10, "object_ptr") == 0) &&
697703
!is_default) {
698704
move_begin = "std::move(";

td/generate/tl_writer_h.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ std::string TD_TL_writer_h::gen_output_begin(const std::string &additional_impor
6464
}
6565

6666
std::string TD_TL_writer_h::gen_output_begin_once() const {
67+
std::string secure_strings;
68+
if (tl_name != "td_api" && tl_name != "telegram_api" && tl_name != "mtproto_api") {
69+
secure_strings = "using secure_string = " + string_type +
70+
";\n\n"
71+
"using secure_bytes = " +
72+
bytes_type + ";\n\n";
73+
}
6774
return "using int32 = std::int32_t;\n"
6875
"using int53 = std::int64_t;\n"
6976
"using int64 = std::int64_t;\n\n"
@@ -73,8 +80,7 @@ std::string TD_TL_writer_h::gen_output_begin_once() const {
7380
";\n\n"
7481

7582
"using bytes = " +
76-
bytes_type +
77-
";\n\n"
83+
bytes_type + ";\n\n" + secure_strings +
7884

7985
"template <class Type>\n"
8086
"using array = std::vector<Type>;\n\n"

td/generate/tl_writer_td.cpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ int TD_TL_writer::get_max_arity() const {
2323
bool TD_TL_writer::is_built_in_simple_type(const std::string &name) const {
2424
return name == "True" || name == "Bool" || name == "Int" || name == "Long" || name == "Double" || name == "String" ||
2525
name == "Int32" || name == "Int53" || name == "Int64" || name == "Int128" || name == "Int256" ||
26-
name == "Int512" || name == "Bytes";
26+
name == "Int512" || name == "Bytes" || name == "SecureString" || name == "SecureBytes";
2727
}
2828

2929
bool TD_TL_writer::is_built_in_complex_type(const std::string &name) const {
@@ -222,6 +222,12 @@ std::string TD_TL_writer::gen_type_name(const tl::tl_tree_type *tree_type) const
222222
if (name == "Bytes") {
223223
return "bytes";
224224
}
225+
if (name == "SecureString") {
226+
return "secure_string";
227+
}
228+
if (name == "SecureBytes") {
229+
return "secure_bytes";
230+
}
225231

226232
if (name == "Vector") {
227233
assert(t->arity == 1);
@@ -275,9 +281,10 @@ std::string TD_TL_writer::gen_constructor_parameter(int field_num, const std::st
275281
field_type == "double ") {
276282
res += field_type;
277283
} else if (field_type == "UInt128 " || field_type == "UInt256 " || field_type == "UInt512 " ||
278-
field_type == "string " || (string_type == bytes_type && field_type == "bytes ")) {
284+
field_type == "string " || (string_type == bytes_type && field_type == "bytes ") ||
285+
field_type == "secure_string " || (string_type == bytes_type && field_type == "secure_bytes ")) {
279286
res += field_type + "const &";
280-
} else if (field_type.compare(0, 5, "array") == 0 || field_type == "bytes " ||
287+
} else if (field_type.compare(0, 5, "array") == 0 || field_type == "bytes " || field_type == "secure_bytes " ||
281288
field_type.compare(0, 10, "object_ptr") == 0) {
282289
res += field_type + "&&";
283290
} else {

0 commit comments

Comments
 (0)