summaryrefslogtreecommitdiff
path: root/src/TgTypeParser.cpp
diff options
context:
space:
mode:
authorJellyBrick <shlee1503@naver.com>2018-05-27 02:27:44 +0900
committerJellyBrick <shlee1503@naver.com>2018-05-27 02:27:44 +0900
commit66cbca3b206567ce62af42cab950696ef6f80adb (patch)
tree9a69b16523de4c083540e4d092942a15cf12ef42 /src/TgTypeParser.cpp
parentb538f1fb43c790c9043630e6bfad42f037dbe03a (diff)
Bot API 3.0 (Maks Mazurov (fox.cpp))
Diffstat (limited to 'src/TgTypeParser.cpp')
-rw-r--r--src/TgTypeParser.cpp232
1 files changed, 232 insertions, 0 deletions
diff --git a/src/TgTypeParser.cpp b/src/TgTypeParser.cpp
index 1b80d7f..c442600 100644
--- a/src/TgTypeParser.cpp
+++ b/src/TgTypeParser.cpp
@@ -85,6 +85,7 @@ User::Ptr TgTypeParser::parseJsonAndGetUser(const ptree& data) const {
result->firstName = data.get<string>("first_name");
result->lastName = data.get("last_name", "");
result->username = data.get("username", "");
+ result->languageCode = data.get("language_code", "");
return result;
}
@@ -98,6 +99,7 @@ string TgTypeParser::parseUser(const User::Ptr& object) const {
appendToJson(result, "first_name", object->firstName);
appendToJson(result, "last_name", object->lastName);
appendToJson(result, "username", object->username);
+ appendToJson(result, "language_code", object->languageCode);
result.erase(result.length() - 1);
result += '}';
return result;
@@ -135,6 +137,7 @@ Message::Ptr TgTypeParser::parseJsonAndGetMessage(const ptree& data) const {
result->contact = tryParseJson<Contact>(&TgTypeParser::parseJsonAndGetContact, data, "contact");
result->location = tryParseJson<Location>(&TgTypeParser::parseJsonAndGetLocation, data, "location");
result->newChatMember = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "new_chat_participant");
+ result->newChatMembers = parseJsonAndGetArray<User>(&TgTypeParser::parseJsonAndGetUser, data, "new_chat_members");
result->leftChatMember = tryParseJson<User>(&TgTypeParser::parseJsonAndGetUser, data, "left_chat_participant");
result->newChatTitle = data.get("new_chat_title", "");
result->newChatPhoto = parseJsonAndGetArray<PhotoSize>(&TgTypeParser::parseJsonAndGetPhotoSize, data, "new_chat_photo");
@@ -173,6 +176,7 @@ string TgTypeParser::parseMessage(const Message::Ptr& object) const {
appendToJson(result, "contact", parseContact(object->contact));
appendToJson(result, "location", parseLocation(object->location));
appendToJson(result, "new_chat_member", parseUser(object->newChatMember));
+ appendToJson(result, "new_chat_members", parseArray(&TgTypeParser::parseUser, object->newChatMembers));
appendToJson(result, "left_chat_member", parseUser(object->leftChatMember));
appendToJson(result, "new_chat_title", object->newChatTitle);
appendToJson(result, "new_chat_photo", parseArray(&TgTypeParser::parsePhotoSize, object->newChatPhoto));
@@ -322,6 +326,32 @@ string TgTypeParser::parseVideo(const Video::Ptr& object) const {
return result;
}
+VideoNote::Ptr TgTypeParser::parseJsonAndGetVideoNote(const ptree& data) const {
+ VideoNote::Ptr result(new VideoNote);
+ result->fileId = data.get<string>("file_id");
+ result->length = data.get<int32_t>("length");
+ result->duration = data.get<int32_t>("duration");
+ result->thumb = tryParseJson<PhotoSize>(&TgTypeParser::parseJsonAndGetPhotoSize, data, "thumb");
+ result->fileSize = data.get("file_size", 0);
+ return result;
+}
+
+string TgTypeParser::parseVideoNote(const VideoNote::Ptr& object) const {
+ if (!object) {
+ return "";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "file_id", object->fileId);
+ appendToJson(result, "length", object->length);
+ appendToJson(result, "duration", object->duration);
+ appendToJson(result, "thumb", parsePhotoSize(object->thumb));
+ appendToJson(result, "file_size", object->fileSize);
+ result += '}';
+ result.erase();
+ return result;
+}
+
Contact::Ptr TgTypeParser::parseJsonAndGetContact(const ptree& data) const {
auto result(make_shared<Contact>());
result->phoneNumber = data.get<string>("phone_number");
@@ -1178,6 +1208,7 @@ InlineQueryResultGif::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultGif(cons
result->gifUrl = data.get<string>("gif_url", "");
result->gifWidth = data.get("gif_width", 0);
result->gifHeight = data.get("gif_height", 0);
+ result->gifDuration = data.get("gif_duration", 0);
result->thumbUrl = data.get<string>("thumb_url");
return result;
}
@@ -1191,6 +1222,7 @@ std::string TgTypeParser::parseInlineQueryResultGif(const InlineQueryResultGif::
appendToJson(result, "gif_url", object->gifUrl);
appendToJson(result, "gif_width", object->gifWidth);
appendToJson(result, "gif_height", object->gifHeight);
+ appendToJson(result, "gif_duration", object->gifDuration);
appendToJson(result, "thumb_url", object->thumbUrl);
// The last comma will be erased by parseInlineQueryResult().
return result;
@@ -1202,6 +1234,7 @@ InlineQueryResultMpeg4Gif::Ptr TgTypeParser::parseJsonAndGetInlineQueryResultMpe
result->mpeg4Url = data.get<string>("mpeg4_url");
result->mpeg4Width = data.get("mpeg4_width", 0);
result->mpeg4Height = data.get("mpeg4_height", 0);
+ result->mpeg4Duration = data.get("mpeg4_duration", 0);
result->thumbUrl = data.get<string>("thumb_url");
return result;
}
@@ -1216,6 +1249,7 @@ std::string TgTypeParser::parseInlineQueryResultMpeg4Gif(const InlineQueryResult
appendToJson(result, "mpeg4_url", object->mpeg4Url);
appendToJson(result, "mpeg4_width", object->mpeg4Width);
appendToJson(result, "mpeg4_height", object->mpeg4Height);
+ appendToJson(result, "mpeg4_duration", object->mpeg4Duration);
appendToJson(result, "thumb_url", object->thumbUrl);
// The last comma will be erased by parseInlineQueryResult().
return result;
@@ -1539,6 +1573,204 @@ std::string TgTypeParser::parseInputContactMessageContent(const InputContactMess
return result;
}
+Invoice::Ptr TgTypeParser::parseJsonAndGetInvoice(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<Invoice>());
+ result->title = data.get<string>("title");
+ result->description = data.get<string>("description");
+ result->startParameter = data.get<string>("start_parameter");
+ result->currency = data.get<string>("currency");
+ result->totalAmount = data.get<int32_t>("total_amount");
+ return result;
+}
+
+std::string TgTypeParser::parseInvoice(const Invoice::Ptr& object) const {
+ if (!object) {
+ return " ";
+ }
+ string result;
+ result += '{';
+ appendToJson(result, "title", object->title);
+ appendToJson(result, "description", object->description);
+ appendToJson(result, "start_parameter", object->startParameter);
+ appendToJson(result, "currency", object->currency);
+ appendToJson(result, "total_amount", object->totalAmount);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+LabeledPrice::Ptr TgTypeParser::parseJsonAndGetLabeledPrice(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<LabeledPrice>());
+ result->label = data.get<string>("label");
+ result->amount = data.get<int32_t>("amount");
+ return result;
+}
+
+string TgTypeParser::parseLabeledPrice(const LabeledPrice::Ptr& object) const {
+ std::string result;
+ result += '{';
+ appendToJson(result, "label", object->label);
+ appendToJson(result, "amount", object->amount);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+OrderInfo::Ptr TgTypeParser::parseJsonAndGetOrderInfo(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<OrderInfo>());
+ result->name = data.get<string>("name", "");
+ result->phoneNumber = data.get<string>("phone_number", "");
+ result->email = data.get<string>("email", "");
+ result->shippingAddress = tryParseJson(&TgTypeParser::parseJsonAndGetShippingAddress, data, "shipping_address");
+ return result;
+}
+
+string TgTypeParser::parseOrderInfo(const OrderInfo::Ptr& object) const {
+ if (!object) {
+ return " ";
+ }
+ std::string result;
+ result += '{';
+ if (!object->name.empty()) {
+ appendToJson(result, "name", object->name);
+ }
+ if (!object->phoneNumber.empty()) {
+ appendToJson(result, "phone_number", object->phoneNumber);
+ }
+ if (!object->email.empty()) {
+ appendToJson(result, "email", object->email);
+ }
+ if (!object->shippingAddress) {
+ result += R"("shipping_address":)";
+ result += parseShippingAddress(object->shippingAddress);
+ result += ",";
+ }
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+PreCheckoutQuery::Ptr TgTypeParser::parseJsonAndGetPreCheckoutQuery(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<PreCheckoutQuery>());
+ result->id = data.get<string>("id");
+ result->from = tryParseJson(&TgTypeParser::parseJsonAndGetUser, data, "user");
+ result->currency = data.get<string>("currency");
+ result->totalAmount = data.get<int32_t>("total_amount");
+ return result;
+}
+
+string TgTypeParser::parsePreCheckoutQuery(const PreCheckoutQuery::Ptr& object) const {
+ std::string result;
+ result += '{';
+ appendToJson(result, "id", object->id);
+ result += R"("user":)";
+ result += parseUser(object->from);
+ result += ",";
+ appendToJson(result, "currency", object->currency);
+ appendToJson(result, "total_amount", object->totalAmount);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+ShippingAddress::Ptr TgTypeParser::parseJsonAndGetShippingAddress(const boost::property_tree::ptree& data) const {
+ ShippingAddress::Ptr result;
+ result->countryCode = data.get<string>("country_code");
+ result->state = data.get<string>("state", "");
+ result->city = data.get<string>("city");
+ result->streetLine1 = data.get<string>("street_line1");
+ result->streetLine2 = data.get<string>("street_line2");
+ result->postCode = data.get<string>("post_code");
+ return result;
+}
+
+string TgTypeParser::parseShippingAddress(const ShippingAddress::Ptr& object) const {
+ std::string result;
+ result += '{';
+ appendToJson(result, "country_code", object->countryCode);
+ if (!object->state.empty()) {
+ appendToJson(result, "state", object->state);
+ }
+ appendToJson(result, "city", object->city);
+ appendToJson(result, "street_line1", object->streetLine1);
+ appendToJson(result, "street_line2", object->streetLine2);
+ appendToJson(result, "post_code", object->postCode);
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+ShippingOption::Ptr TgTypeParser::parseJsonAndGetShippingOption(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<ShippingOption>());
+ result->id = data.get<string>("id");
+ result->title = data.get<string>("title");
+ result->prices = parseJsonAndGetArray<LabeledPrice>(&TgTypeParser::parseJsonAndGetLabeledPrice, data, "prices");
+ return result;
+}
+
+string TgTypeParser::parseShippingOption(const ShippingOption::Ptr& object) const {
+ std::string result;
+ result += '{';
+ appendToJson(result, "id", object->id);
+ appendToJson(result, "title", object->title);
+ result.erase(result.length() - 1);
+ result += R"("prices":)";
+ result += parseArray(&TgTypeParser::parseLabeledPrice, object->prices);
+ result += '}';
+ return result;
+}
+
+ShippingQuery::Ptr TgTypeParser::parseJsonAndGetShippingQuery(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<ShippingQuery>());
+ result->id = data.get<string>("id");
+ result->from = tryParseJson(&TgTypeParser::parseJsonAndGetUser, data, "from");
+ result->invoicePayload = data.get<string>("invoice_payload");
+ result->shippingAddress = tryParseJson(&TgTypeParser::parseJsonAndGetShippingAddress, data, "shipping_address");
+ return result;
+}
+
+string TgTypeParser::parseShippingQuery(const ShippingQuery::Ptr& object) const {
+ string result;
+ result += '{';
+ appendToJson(result, "id", object->id);
+ result += R"("from":)";
+ result += parseUser(object->from);
+ result += ",";
+ appendToJson(result, "invoice_payload", object->invoicePayload);
+ result += R"("shipping_address":)";
+ result += parseShippingAddress(object->shippingAddress);
+ result += ",";
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+SuccessfulPayment::Ptr TgTypeParser::parseJsonAndGetSucessfulPayment(const boost::property_tree::ptree& data) const {
+ auto result(make_shared<SuccessfulPayment>());
+ result->currency = data.get<string>("currency");
+ result->totalAmount = data.get<int32_t>("total_amount");
+ result->invoicePayload = data.get<string>("invoice_payload");
+ result->shippingOptionId = data.get<string>("shipping_option_id");
+ result->orderInfo = tryParseJson(&TgTypeParser::parseJsonAndGetOrderInfo, data, "order_info");
+ return result;
+}
+
+std::string TgTypeParser::parseSucessfulPayment(const SuccessfulPayment::Ptr& object) const {
+ string result;
+ result += '{';
+ appendToJson(result, "currency", object->currency);
+ appendToJson(result, "total_amount", object->totalAmount);
+ appendToJson(result, "invoice_payload", object->invoicePayload);
+ appendToJson(result, "shipping_option_id", object->shippingOptionId);
+ result += R"("order_info":)";
+ result += parseOrderInfo(object->orderInfo);
+ result += ",";
+ result.erase(result.length() - 1);
+ result += '}';
+ return result;
+}
+
+
void TgTypeParser::appendToJson(string& json, const string& varName, const string& value) const {
if (value.empty()) {
return;