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 #pragma once
8 
9 #include "td/telegram/td_api.h"
10 #include "td/telegram/telegram_api.h"
11 
12 #include "td/utils/common.h"
13 #include "td/utils/StringBuilder.h"
14 
15 namespace td {
16 
17 // append only before Size
18 enum class MessageSearchFilter : int32 {
19   Empty,
20   Animation,
21   Audio,
22   Document,
23   Photo,
24   Video,
25   VoiceNote,
26   PhotoAndVideo,
27   Url,
28   ChatPhoto,
29   Call,
30   MissedCall,
31   VideoNote,
32   VoiceAndVideoNote,
33   Mention,
34   UnreadMention,
35   FailedToSend,
36   Pinned,
37   Size
38 };
39 
message_search_filter_count()40 inline constexpr size_t message_search_filter_count() {
41   return static_cast<int32>(MessageSearchFilter::Size) - 1;
42 }
43 
message_search_filter_index(MessageSearchFilter filter)44 inline int32 message_search_filter_index(MessageSearchFilter filter) {
45   CHECK(filter != MessageSearchFilter::Empty);
46   return static_cast<int32>(filter) - 1;
47 }
48 
message_search_filter_index_mask(MessageSearchFilter filter)49 inline int32 message_search_filter_index_mask(MessageSearchFilter filter) {
50   if (filter == MessageSearchFilter::Empty) {
51     return 0;
52   }
53   return 1 << message_search_filter_index(filter);
54 }
55 
call_message_search_filter_index(MessageSearchFilter filter)56 inline int32 call_message_search_filter_index(MessageSearchFilter filter) {
57   CHECK(filter == MessageSearchFilter::Call || filter == MessageSearchFilter::MissedCall);
58   return static_cast<int32>(filter) - static_cast<int32>(MessageSearchFilter::Call);
59 }
60 
61 tl_object_ptr<telegram_api::MessagesFilter> get_input_messages_filter(MessageSearchFilter filter);
62 
63 MessageSearchFilter get_message_search_filter(const tl_object_ptr<td_api::SearchMessagesFilter> &filter);
64 
65 StringBuilder &operator<<(StringBuilder &string_builder, MessageSearchFilter filter);
66 
67 }  // namespace td
68