|
1 | 1 | #include "tgbot/TgTypeParser.h" |
2 | 2 |
|
| 3 | +#include "tgbot/tools/StringTools.h" |
| 4 | + |
3 | 5 | namespace TgBot { |
4 | 6 |
|
5 | 7 | Update::Ptr TgTypeParser::parseJsonAndGetUpdate(const boost::property_tree::ptree& data) const { |
@@ -97,10 +99,7 @@ std::string TgTypeParser::parseWebhookInfo(const WebhookInfo::Ptr& object) const |
97 | 99 | appendToJson(result, "last_error_message", object->lastErrorMessage); |
98 | 100 | appendToJson(result, "last_synchronization_error_date", object->lastSynchronizationErrorDate); |
99 | 101 | appendToJson(result, "max_connections", object->maxConnections); |
100 | | - appendToJson(result, "allowed_updates", parseArray<std::string>( |
101 | | - [] (const std::string& s)->std::string { |
102 | | - return s; |
103 | | - }, object->allowedUpdates)); |
| 102 | + appendStringArrayToJson(result, "allowed_updates", object->allowedUpdates); |
104 | 103 | removeLastComma(result); |
105 | 104 | result += '}'; |
106 | 105 | return result; |
@@ -227,10 +226,7 @@ std::string TgTypeParser::parseChat(const Chat::Ptr& object) const { |
227 | 226 | appendToJson(result, "last_name", object->lastName); |
228 | 227 | appendToJson(result, "is_forum", object->isForum); |
229 | 228 | appendToJson(result, "photo", parseChatPhoto(object->photo)); |
230 | | - appendToJson(result, "active_usernames", parseArray<std::string>( |
231 | | - [] (const std::string& s)->std::string { |
232 | | - return s; |
233 | | - }, object->activeUsernames)); |
| 229 | + appendStringArrayToJson(result, "active_usernames", object->activeUsernames); |
234 | 230 | appendToJson(result, "birthdate", parseBirthdate(object->birthdate)); |
235 | 231 | appendToJson(result, "business_intro", parseBusinessIntro(object->businessIntro)); |
236 | 232 | appendToJson(result, "business_location", parseBusinessLocation(object->businessLocation)); |
@@ -1650,10 +1646,7 @@ std::string TgTypeParser::parseGiveaway(const Giveaway::Ptr& object) const { |
1650 | 1646 | appendToJson(result, "only_new_members", object->onlyNewMembers); |
1651 | 1647 | appendToJson(result, "has_public_winners", object->hasPublicWinners); |
1652 | 1648 | appendToJson(result, "prize_description", object->prizeDescription); |
1653 | | - appendToJson(result, "country_codes", parseArray<std::string>( |
1654 | | - [] (const std::string& s)->std::string { |
1655 | | - return s; |
1656 | | - }, object->countryCodes)); |
| 1649 | + appendStringArrayToJson(result, "country_codes", object->countryCodes); |
1657 | 1650 | appendToJson(result, "premium_subscription_month_count", object->premiumSubscriptionMonthCount); |
1658 | 1651 | removeLastComma(result); |
1659 | 1652 | result += '}'; |
@@ -3819,15 +3812,9 @@ std::string TgTypeParser::parseInputSticker(const InputSticker::Ptr& object) con |
3819 | 3812 | result += '{'; |
3820 | 3813 | appendToJson(result, "sticker", object->sticker); |
3821 | 3814 | appendToJson(result, "format", object->format); |
3822 | | - appendToJson(result, "emoji_list", parseArray<std::string>( |
3823 | | - [] (const std::string& s)->std::string { |
3824 | | - return s; |
3825 | | - }, object->emojiList)); |
| 3815 | + appendStringArrayToJson(result, "emoji_list", object->emojiList); |
3826 | 3816 | appendToJson(result, "mask_position", parseMaskPosition(object->maskPosition)); |
3827 | | - appendToJson(result, "keywords", parseArray<std::string>( |
3828 | | - [] (const std::string& s)->std::string { |
3829 | | - return s; |
3830 | | - }, object->keywords)); |
| 3817 | + appendStringArrayToJson(result, "keywords", object->keywords); |
3831 | 3818 | removeLastComma(result); |
3832 | 3819 | result += '}'; |
3833 | 3820 | return result; |
@@ -5416,10 +5403,7 @@ std::string TgTypeParser::parsePassportElementErrorFiles(const PassportElementEr |
5416 | 5403 | // This function will be called by parsePassportElementError(), so I don't add |
5417 | 5404 | // curly brackets to the result std::string. |
5418 | 5405 | std::string result; |
5419 | | - appendToJson(result, "file_hashes", |
5420 | | - parseArray<std::string>([] (const std::string& s)->std::string { |
5421 | | - return s; |
5422 | | - }, object->fileHashes)); |
| 5406 | + appendStringArrayToJson(result, "file_hashes", object->fileHashes); |
5423 | 5407 | // The last comma will be erased by parsePassportElementError(). |
5424 | 5408 | return result; |
5425 | 5409 | } |
@@ -5460,10 +5444,7 @@ std::string TgTypeParser::parsePassportElementErrorTranslationFiles(const Passpo |
5460 | 5444 | // This function will be called by parsePassportElementError(), so I don't add |
5461 | 5445 | // curly brackets to the result std::string. |
5462 | 5446 | std::string result; |
5463 | | - appendToJson(result, "file_hashes", |
5464 | | - parseArray<std::string>([] (const std::string& s)->std::string { |
5465 | | - return s; |
5466 | | - }, object->fileHashes)); |
| 5447 | + appendStringArrayToJson(result, "file_hashes", object->fileHashes); |
5467 | 5448 | // The last comma will be erased by parsePassportElementError(). |
5468 | 5449 | return result; |
5469 | 5450 | } |
@@ -5582,6 +5563,24 @@ std::string TgTypeParser::parseGenericReply(const GenericReply::Ptr& object) con |
5582 | 5563 | return ""; |
5583 | 5564 | } |
5584 | 5565 |
|
| 5566 | +void TgTypeParser::appendStringArrayToJson(std::string& json, const std::string& varName, const std::vector<std::string>& values) const { |
| 5567 | + if (values.empty()) { |
| 5568 | + return; |
| 5569 | + } |
| 5570 | + json += '"'; |
| 5571 | + json += varName; |
| 5572 | + json += R"(":[)"; |
| 5573 | + for (std::size_t i = 0; i < values.size(); ++i) { |
| 5574 | + if (i != 0) { |
| 5575 | + json += ','; |
| 5576 | + } |
| 5577 | + json += '"'; |
| 5578 | + json += StringTools::escapeJsonString(values[i]); |
| 5579 | + json += '"'; |
| 5580 | + } |
| 5581 | + json += "],"; |
| 5582 | +} |
| 5583 | + |
5585 | 5584 | void TgTypeParser::appendToJson(std::string& json, const std::string& varName, const std::string& value) const { |
5586 | 5585 | if (value.empty()) { |
5587 | 5586 | return; |
|
0 commit comments