1 // 2 // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021 3 // 4 // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 #include "td/telegram/ReportReason.h" 8 9 #include "td/telegram/misc.h" 10 11 namespace td { 12 get_report_reason(td_api::object_ptr<td_api::ChatReportReason> reason,string && message)13Result<ReportReason> ReportReason::get_report_reason(td_api::object_ptr<td_api::ChatReportReason> reason, 14 string &&message) { 15 if (reason == nullptr) { 16 return Status::Error(400, "Chat report reason must be non-empty"); 17 } 18 if (!clean_input_string(message)) { 19 return Status::Error(400, "Report text must be encoded in UTF-8"); 20 } 21 22 auto type = [&] { 23 switch (reason->get_id()) { 24 case td_api::chatReportReasonSpam::ID: 25 return ReportReason::Type::Spam; 26 case td_api::chatReportReasonViolence::ID: 27 return ReportReason::Type::Violence; 28 case td_api::chatReportReasonPornography::ID: 29 return ReportReason::Type::Pornography; 30 case td_api::chatReportReasonChildAbuse::ID: 31 return ReportReason::Type::ChildAbuse; 32 case td_api::chatReportReasonCopyright::ID: 33 return ReportReason::Type::Copyright; 34 case td_api::chatReportReasonUnrelatedLocation::ID: 35 return ReportReason::Type::UnrelatedLocation; 36 case td_api::chatReportReasonFake::ID: 37 return ReportReason::Type::Fake; 38 case td_api::chatReportReasonCustom::ID: 39 return ReportReason::Type::Custom; 40 default: 41 UNREACHABLE(); 42 return ReportReason::Type::Custom; 43 } 44 }(); 45 return ReportReason(type, std::move(message)); 46 } 47 get_input_report_reason() const48tl_object_ptr<telegram_api::ReportReason> ReportReason::get_input_report_reason() const { 49 switch (type_) { 50 case ReportReason::Type::Spam: 51 return make_tl_object<telegram_api::inputReportReasonSpam>(); 52 case ReportReason::Type::Violence: 53 return make_tl_object<telegram_api::inputReportReasonViolence>(); 54 case ReportReason::Type::Pornography: 55 return make_tl_object<telegram_api::inputReportReasonPornography>(); 56 case ReportReason::Type::ChildAbuse: 57 return make_tl_object<telegram_api::inputReportReasonChildAbuse>(); 58 case ReportReason::Type::Copyright: 59 return make_tl_object<telegram_api::inputReportReasonCopyright>(); 60 case ReportReason::Type::UnrelatedLocation: 61 return make_tl_object<telegram_api::inputReportReasonGeoIrrelevant>(); 62 case ReportReason::Type::Fake: 63 return make_tl_object<telegram_api::inputReportReasonFake>(); 64 case ReportReason::Type::Custom: 65 return make_tl_object<telegram_api::inputReportReasonOther>(); 66 default: 67 UNREACHABLE(); 68 return nullptr; 69 } 70 } 71 operator <<(StringBuilder & string_builder,const ReportReason & report_reason)72StringBuilder &operator<<(StringBuilder &string_builder, const ReportReason &report_reason) { 73 string_builder << "ReportReason"; 74 switch (report_reason.type_) { 75 case ReportReason::Type::Spam: 76 return string_builder << "Spam"; 77 case ReportReason::Type::Violence: 78 return string_builder << "Violence"; 79 case ReportReason::Type::Pornography: 80 return string_builder << "Pornography"; 81 case ReportReason::Type::ChildAbuse: 82 return string_builder << "ChildAbuse"; 83 case ReportReason::Type::Copyright: 84 return string_builder << "Copyright"; 85 case ReportReason::Type::UnrelatedLocation: 86 return string_builder << "UnrelatedLocation"; 87 case ReportReason::Type::Fake: 88 return string_builder << "Fake"; 89 case ReportReason::Type::Custom: 90 return string_builder << "Custom"; 91 default: 92 UNREACHABLE(); 93 } 94 return string_builder; 95 } 96 97 } // namespace td 98