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)13 Result<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() const48 tl_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)72 StringBuilder &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