From 4aee5d22a81a36d46d594cf70b4a6cbd07c85b69 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 4 Jul 2026 00:37:27 +0300 Subject: Pass JsonValue by rvalue reference. --- telegram-bot-api/Client.cpp | 40 +++++++++++++++++++--------------------- telegram-bot-api/Client.h | 14 +++++++------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 613769e..ec86c5b 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -10156,7 +10156,7 @@ td::Result> Client::get_keyboard_ return nullptr; } -td::Result> Client::get_keyboard_button(td::JsonValue &button) { +td::Result> Client::get_keyboard_button(td::JsonValue &&button) { if (button.type() == td::JsonValue::Type::Object) { auto &object = button.get_object(); @@ -10174,7 +10174,7 @@ td::Result> Client::get_keyboard_butt } td::Result> Client::get_inline_keyboard_button( - td::JsonValue &button, BotUserIds &bot_user_ids) { + td::JsonValue &&button, BotUserIds &bot_user_ids) { if (button.type() != td::JsonValue::Type::Object) { return td::Status::Error(400, "InlineKeyboardButton must be an Object"); } @@ -10329,7 +10329,7 @@ td::Result> Client::get_reply_markup(td: return td::Status::Error(400, "Field \"keyboard\" must be an Array of Arrays"); } for (auto &button : row.get_array()) { - auto r_button = get_keyboard_button(button); + auto r_button = get_keyboard_button(std::move(button)); if (r_button.is_error()) { return td::Status::Error(400, PSLICE() << "Can't parse keyboard button: " << r_button.error().message()); } @@ -10350,7 +10350,7 @@ td::Result> Client::get_reply_markup(td: "Field \"inline_keyboard\" of the InlineKeyboardMarkup must be an Array of Arrays"); } for (auto &button : inline_row.get_array()) { - auto r_button = get_inline_keyboard_button(button, bot_user_ids); + auto r_button = get_inline_keyboard_button(std::move(button), bot_user_ids); if (r_button.is_error()) { return td::Status::Error(400, PSLICE() << "Can't parse inline keyboard button: " << r_button.error().message()); @@ -10447,7 +10447,7 @@ td::Result> Client::get_input return make_object(std::move(price), send_date); } -td::Result> Client::get_labeled_price_part(td::JsonValue &value) { +td::Result> Client::get_labeled_price_part(td::JsonValue &&value) { if (value.type() != td::JsonValue::Type::Object) { return td::Status::Error(400, "LabeledPrice must be an Object"); } @@ -10464,14 +10464,14 @@ td::Result> Client::get_labeled_pri } td::Result>> Client::get_labeled_price_parts( - td::JsonValue &value) { + td::JsonValue &&value) { if (value.type() != td::JsonValue::Type::Array) { return td::Status::Error(400, "Expected an Array of labeled prices"); } td::vector> prices; for (auto &price : value.get_array()) { - auto r_labeled_price = get_labeled_price_part(price); + auto r_labeled_price = get_labeled_price_part(std::move(price)); if (r_labeled_price.is_error()) { return td::Status::Error(400, PSLICE() << "Can't parse labeled price: " << r_labeled_price.error().message()); } @@ -10484,7 +10484,7 @@ td::Result>> Client::get return std::move(prices); } -td::Result> Client::get_suggested_tip_amounts(td::JsonValue &value) { +td::Result> Client::get_suggested_tip_amounts(td::JsonValue &&value) { if (value.type() != td::JsonValue::Type::Array) { return td::Status::Error(400, "Expected an Array of suggested tip amounts"); } @@ -10508,7 +10508,7 @@ td::Result> Client::get_suggested_tip_amounts(td::JsonValu return std::move(suggested_tip_amounts); } -td::Result> Client::get_shipping_option(td::JsonValue &option) { +td::Result> Client::get_shipping_option(td::JsonValue &&option) { if (option.type() != td::JsonValue::Type::Object) { return td::Status::Error(400, "ShippingOption must be an Object"); } @@ -10527,7 +10527,7 @@ td::Result> Client::get_shipping_opti TRY_RESULT(prices_json, object.extract_required_field("prices", td::JsonValue::Type::Array)); - auto r_prices = get_labeled_price_parts(prices_json); + auto r_prices = get_labeled_price_parts(std::move(prices_json)); if (r_prices.is_error()) { return td::Status::Error(400, PSLICE() << "Can't parse shipping option prices: " << r_prices.error().message()); } @@ -10555,7 +10555,7 @@ td::Result>> Client::get_s td::vector> options; for (auto &option : value.get_array()) { - auto r_shipping_option = get_shipping_option(option); + auto r_shipping_option = get_shipping_option(std::move(option)); if (r_shipping_option.is_error()) { return td::Status::Error(400, PSLICE() << "Can't parse shipping option: " << r_shipping_option.error().message()); } @@ -10695,10 +10695,7 @@ td::Result> Client::get_input_thumbna } td::Result> Client::get_input_message_content( - const Query *query, td::JsonValue &input_message_content, bool is_input_message_content_required) const { - CHECK(input_message_content.type() == td::JsonValue::Type::Object); - auto &object = input_message_content.get_object(); - + const Query *query, td::JsonObject &object, bool is_input_message_content_required) const { if (object.has_field("rich_message")) { TRY_RESULT(rich_message, object.extract_required_field("rich_message", td::JsonValue::Type::Object)); TRY_RESULT(input_rich_message, get_input_rich_message(query, std::move(rich_message))); @@ -10762,14 +10759,14 @@ td::Result> Client::get_input_me TRY_RESULT(provider_token, object.get_optional_string_field("provider_token")); TRY_RESULT(currency, object.get_required_string_field("currency")); TRY_RESULT(prices_object, object.extract_required_field("prices", td::JsonValue::Type::Array)); - TRY_RESULT(prices, get_labeled_price_parts(prices_object)); + TRY_RESULT(prices, get_labeled_price_parts(std::move(prices_object))); TRY_RESULT(provider_data, object.get_optional_string_field("provider_data")); TRY_RESULT(max_tip_amount, object.get_optional_long_field("max_tip_amount")); td::vector suggested_tip_amounts; TRY_RESULT(suggested_tip_amounts_array, object.extract_optional_field("suggested_tip_amounts", td::JsonValue::Type::Array)); if (suggested_tip_amounts_array.type() == td::JsonValue::Type::Array) { - TRY_RESULT_ASSIGN(suggested_tip_amounts, get_suggested_tip_amounts(suggested_tip_amounts_array)); + TRY_RESULT_ASSIGN(suggested_tip_amounts, get_suggested_tip_amounts(std::move(suggested_tip_amounts_array))); } TRY_RESULT(photo_url, object.get_optional_string_field("photo_url")); TRY_RESULT(photo_size, object.get_optional_int_field("photo_size")); @@ -10943,8 +10940,9 @@ td::Result> Client::get_inlin input_message_content = std::move(input_message_text); } } else { + auto &input_message_content_object = input_message_content_obj.get_object(); TRY_RESULT(input_message_content_result, - get_input_message_content(query, input_message_content_obj, is_input_message_content_required)); + get_input_message_content(query, input_message_content_object, is_input_message_content_required)); input_message_content = std::move(input_message_content_result); } TRY_RESULT(input_caption, object.get_optional_string_field("caption")); @@ -12899,7 +12897,7 @@ td::Result> Client::get_input_me return td::Status::Error(400, "Can't parse prices JSON object"); } - TRY_RESULT(prices, get_labeled_price_parts(r_labeled_price_parts_value.ok_ref())); + TRY_RESULT(prices, get_labeled_price_parts(r_labeled_price_parts_value.move_as_ok())); int64 max_tip_amount = 0; td::vector suggested_tip_amounts; @@ -12920,7 +12918,7 @@ td::Result> Client::get_input_me return td::Status::Error(400, "Can't parse suggested_tip_amounts JSON object"); } - TRY_RESULT_ASSIGN(suggested_tip_amounts, get_suggested_tip_amounts(r_suggested_tip_amounts_value.ok_ref())); + TRY_RESULT_ASSIGN(suggested_tip_amounts, get_suggested_tip_amounts(r_suggested_tip_amounts_value.move_as_ok())); } } @@ -15299,7 +15297,7 @@ td::Status Client::process_save_prepared_keyboard_button_query(PromisedQueryPtr return td::Status::Error(400, "Can't parse keyboard button JSON object"); } auto value = r_value.move_as_ok(); - auto r_button = get_keyboard_button(value); + auto r_button = get_keyboard_button(std::move(value)); if (r_button.is_error()) { return td::Status::Error(400, PSLICE() << "Can't parse keyboard button: " << r_button.error().message()); } diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index d32096f..25ecad0 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -512,12 +512,12 @@ class Client final : public WebhookActor::Callback { static td::Result> get_keyboard_button_type(td::JsonObject &object); - static td::Result> get_keyboard_button(td::JsonValue &button); + static td::Result> get_keyboard_button(td::JsonValue &&button); static td::Result> get_inline_keyboard_button_type( td::JsonObject &object, BotUserIds &bot_user_ids); - static td::Result> get_inline_keyboard_button(td::JsonValue &button, + static td::Result> get_inline_keyboard_button(td::JsonValue &&button, BotUserIds &bot_user_ids); static td::Result> get_reply_markup(const Query *query, BotUserIds &bot_user_ids); @@ -530,20 +530,20 @@ class Client final : public WebhookActor::Callback { static td::Result> get_input_suggested_post_info(td::JsonValue &&value); - static td::Result> get_labeled_price_part(td::JsonValue &value); + static td::Result> get_labeled_price_part(td::JsonValue &&value); - static td::Result>> get_labeled_price_parts(td::JsonValue &value); + static td::Result>> get_labeled_price_parts(td::JsonValue &&value); - static td::Result> get_suggested_tip_amounts(td::JsonValue &value); + static td::Result> get_suggested_tip_amounts(td::JsonValue &&value); - static td::Result> get_shipping_option(td::JsonValue &option); + static td::Result> get_shipping_option(td::JsonValue &&option); static td::Result>> get_shipping_options(const Query *query); static td::Result>> get_shipping_options(td::JsonValue &&value); td::Result> get_input_message_content( - const Query *query, td::JsonValue &input_message_content, bool is_input_message_content_required) const; + const Query *query, td::JsonObject &object, bool is_input_message_content_required) const; static object_ptr get_chat_action(const Query *query); -- cgit v1.2.3