mikufans_proto_intl/
bilibili.main.community.reply.v1.rs

1// This file is @generated by prost-build.
2///
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct Activity {
5    ///
6    #[prost(int64, tag = "1")]
7    pub activity_id: i64,
8    ///
9    #[prost(int64, tag = "2")]
10    pub activity_state: i64,
11    ///
12    #[prost(string, tag = "3")]
13    pub activity_placeholder: ::prost::alloc::string::String,
14}
15///
16#[derive(Clone, PartialEq, ::prost::Message)]
17pub struct AnswerQuestionReq {
18    ///
19    #[prost(int64, tag = "1")]
20    pub qid: i64,
21    ///
22    #[prost(string, tag = "2")]
23    pub option_key: ::prost::alloc::string::String,
24}
25///
26#[derive(Clone, PartialEq, ::prost::Message)]
27pub struct AnswerQuestionResp {
28    ///
29    #[prost(bool, tag = "1")]
30    pub passed: bool,
31    ///
32    #[prost(bool, tag = "2")]
33    pub member_passed: bool,
34    ///
35    #[prost(message, optional, tag = "3")]
36    pub member_passed_popup: ::core::option::Option<
37        answer_question_resp::MemberPassedPopup,
38    >,
39    ///
40    #[prost(string, tag = "4")]
41    pub bottom_text: ::prost::alloc::string::String,
42    ///
43    #[prost(message, optional, tag = "5")]
44    pub stat: ::core::option::Option<QuestionCardStat>,
45}
46/// Nested message and enum types in `AnswerQuestionResp`.
47pub mod answer_question_resp {
48    ///
49    #[derive(Clone, PartialEq, ::prost::Message)]
50    pub struct MemberPassedPopup {
51        ///
52        #[prost(string, tag = "1")]
53        pub title: ::prost::alloc::string::String,
54        ///
55        #[prost(string, tag = "2")]
56        pub subtitle: ::prost::alloc::string::String,
57        ///
58        #[prost(string, tag = "3")]
59        pub h5_link: ::prost::alloc::string::String,
60    }
61}
62///
63#[derive(Clone, PartialEq, ::prost::Message)]
64pub struct ArticleSearchItem {
65    ///
66    #[prost(string, tag = "1")]
67    pub title: ::prost::alloc::string::String,
68    ///
69    #[prost(string, tag = "2")]
70    pub up_nickname: ::prost::alloc::string::String,
71    ///
72    #[prost(string, repeated, tag = "3")]
73    pub covers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
74}
75///
76#[derive(Clone, PartialEq, ::prost::Message)]
77pub struct AtGroup {
78    ///
79    #[prost(enumeration = "at_group::Type", tag = "1")]
80    pub group_type: i32,
81    ///
82    #[prost(string, tag = "2")]
83    pub group_name: ::prost::alloc::string::String,
84    ///
85    #[prost(message, repeated, tag = "3")]
86    pub items: ::prost::alloc::vec::Vec<AtItem>,
87}
88/// Nested message and enum types in `AtGroup`.
89pub mod at_group {
90    ///
91    #[derive(
92        Clone,
93        Copy,
94        Debug,
95        PartialEq,
96        Eq,
97        Hash,
98        PartialOrd,
99        Ord,
100        ::prost::Enumeration
101    )]
102    #[repr(i32)]
103    pub enum Type {
104        ///
105        AtGroupTypeDefault = 0,
106        ///
107        AtGroupTypeRecent = 1,
108        ///
109        AtGroupTypeFollow = 2,
110        ///
111        AtGroupTypeFans = 3,
112        ///
113        AtGroupTypeOthers = 4,
114    }
115    impl Type {
116        /// String value of the enum field names used in the ProtoBuf definition.
117        ///
118        /// The values are not transformed in any way and thus are considered stable
119        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
120        pub fn as_str_name(&self) -> &'static str {
121            match self {
122                Self::AtGroupTypeDefault => "AT_GROUP_TYPE_DEFAULT",
123                Self::AtGroupTypeRecent => "AT_GROUP_TYPE_RECENT",
124                Self::AtGroupTypeFollow => "AT_GROUP_TYPE_FOLLOW",
125                Self::AtGroupTypeFans => "AT_GROUP_TYPE_FANS",
126                Self::AtGroupTypeOthers => "AT_GROUP_TYPE_OTHERS",
127            }
128        }
129        /// Creates an enum from field names used in the ProtoBuf definition.
130        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
131            match value {
132                "AT_GROUP_TYPE_DEFAULT" => Some(Self::AtGroupTypeDefault),
133                "AT_GROUP_TYPE_RECENT" => Some(Self::AtGroupTypeRecent),
134                "AT_GROUP_TYPE_FOLLOW" => Some(Self::AtGroupTypeFollow),
135                "AT_GROUP_TYPE_FANS" => Some(Self::AtGroupTypeFans),
136                "AT_GROUP_TYPE_OTHERS" => Some(Self::AtGroupTypeOthers),
137                _ => None,
138            }
139        }
140    }
141}
142///
143#[derive(Clone, PartialEq, ::prost::Message)]
144pub struct AtItem {
145    ///
146    #[prost(int64, tag = "1")]
147    pub mid: i64,
148    ///
149    #[prost(string, tag = "2")]
150    pub name: ::prost::alloc::string::String,
151    ///
152    #[prost(string, tag = "3")]
153    pub face: ::prost::alloc::string::String,
154    ///
155    #[prost(int32, tag = "4")]
156    pub fans: i32,
157    ///
158    #[prost(int32, tag = "5")]
159    pub official_verify_type: i32,
160}
161///
162#[derive(Clone, PartialEq, ::prost::Message)]
163pub struct AtSearchReply {
164    ///
165    #[prost(message, repeated, tag = "1")]
166    pub groups: ::prost::alloc::vec::Vec<AtGroup>,
167}
168///
169#[derive(Clone, PartialEq, ::prost::Message)]
170pub struct AtSearchReq {
171    ///
172    #[prost(int64, tag = "1")]
173    pub mid: i64,
174    ///
175    #[prost(string, tag = "2")]
176    pub keyword: ::prost::alloc::string::String,
177}
178///
179#[derive(Clone, PartialEq, ::prost::Message)]
180pub struct Cm {
181    ///
182    #[prost(message, optional, tag = "1")]
183    pub source_content: ::core::option::Option<::prost_types::Any>,
184}
185///
186#[derive(Clone, PartialEq, ::prost::Message)]
187pub struct Content {
188    ///
189    #[prost(string, tag = "1")]
190    pub message: ::prost::alloc::string::String,
191    ///
192    #[prost(map = "string, message", tag = "2")]
193    pub members: ::std::collections::HashMap<::prost::alloc::string::String, Member>,
194    ///
195    #[prost(map = "string, message", tag = "3")]
196    pub emotes: ::std::collections::HashMap<::prost::alloc::string::String, Emote>,
197    ///
198    #[prost(map = "string, message", tag = "4")]
199    pub topics: ::std::collections::HashMap<::prost::alloc::string::String, Topic>,
200    ///
201    #[prost(map = "string, message", tag = "5")]
202    pub urls: ::std::collections::HashMap<::prost::alloc::string::String, Url>,
203    ///
204    #[prost(message, optional, tag = "6")]
205    pub vote: ::core::option::Option<Vote>,
206    ///
207    #[prost(map = "string, int64", tag = "7")]
208    pub at_name_to_mid: ::std::collections::HashMap<::prost::alloc::string::String, i64>,
209    ///
210    #[prost(message, optional, tag = "8")]
211    pub rich_text: ::core::option::Option<RichText>,
212    ///
213    #[prost(message, repeated, tag = "9")]
214    pub pictures: ::prost::alloc::vec::Vec<Picture>,
215    ///
216    #[prost(double, tag = "10")]
217    pub picture_scale: f64,
218}
219///
220#[derive(Clone, PartialEq, ::prost::Message)]
221pub struct CursorReply {
222    ///
223    #[prost(int64, tag = "1")]
224    pub next: i64,
225    ///
226    #[prost(int64, tag = "2")]
227    pub prev: i64,
228    ///
229    #[prost(bool, tag = "3")]
230    pub is_begin: bool,
231    ///
232    #[prost(bool, tag = "4")]
233    pub is_end: bool,
234    ///
235    #[prost(enumeration = "Mode", tag = "5")]
236    pub mode: i32,
237    ///
238    #[prost(string, tag = "6")]
239    pub mode_text: ::prost::alloc::string::String,
240}
241///
242#[derive(Clone, Copy, PartialEq, ::prost::Message)]
243pub struct CursorReq {
244    ///
245    #[prost(int64, tag = "1")]
246    pub next: i64,
247    ///
248    #[prost(int64, tag = "2")]
249    pub prev: i64,
250    ///
251    #[prost(enumeration = "Mode", tag = "4")]
252    pub mode: i32,
253}
254///
255#[derive(Clone, PartialEq, ::prost::Message)]
256pub struct DetailListReply {
257    ///
258    #[prost(message, optional, tag = "1")]
259    pub cursor: ::core::option::Option<CursorReply>,
260    ///
261    #[prost(message, optional, tag = "2")]
262    pub subject_control: ::core::option::Option<SubjectControl>,
263    ///
264    #[prost(message, optional, tag = "3")]
265    pub root: ::core::option::Option<ReplyInfo>,
266    ///
267    #[prost(message, optional, tag = "4")]
268    pub activity: ::core::option::Option<Activity>,
269    ///
270    #[prost(message, optional, tag = "5")]
271    pub likes: ::core::option::Option<LikeInfo>,
272    ///
273    #[prost(enumeration = "Mode", tag = "6")]
274    pub mode: i32,
275    ///
276    #[prost(string, tag = "7")]
277    pub mode_text: ::prost::alloc::string::String,
278    ///
279    #[prost(message, optional, tag = "8")]
280    pub pagination_reply: ::core::option::Option<
281        super::super::super::super::pagination::FeedPaginationReply,
282    >,
283    ///
284    #[prost(string, tag = "9")]
285    pub session_id: ::prost::alloc::string::String,
286}
287///
288#[derive(Clone, PartialEq, ::prost::Message)]
289pub struct DetailListReq {
290    ///
291    #[prost(int64, tag = "1")]
292    pub oid: i64,
293    ///
294    #[prost(int64, tag = "2")]
295    pub r#type: i64,
296    ///
297    #[prost(int64, tag = "3")]
298    pub root: i64,
299    ///
300    #[prost(int64, tag = "4")]
301    pub rpid: i64,
302    ///
303    #[prost(message, optional, tag = "5")]
304    pub cursor: ::core::option::Option<CursorReq>,
305    ///
306    #[prost(enumeration = "DetailListScene", tag = "6")]
307    pub scene: i32,
308    ///
309    #[prost(enumeration = "Mode", tag = "7")]
310    pub mode: i32,
311    ///
312    #[prost(message, optional, tag = "8")]
313    pub pagination: ::core::option::Option<
314        super::super::super::super::pagination::FeedPagination,
315    >,
316    ///
317    #[prost(string, tag = "9")]
318    pub extra: ::prost::alloc::string::String,
319}
320///
321#[derive(Clone, PartialEq, ::prost::Message)]
322pub struct DialogListReply {
323    ///
324    #[prost(message, optional, tag = "1")]
325    pub cursor: ::core::option::Option<CursorReply>,
326    ///
327    #[prost(message, optional, tag = "2")]
328    pub subject_control: ::core::option::Option<SubjectControl>,
329    ///
330    #[prost(message, repeated, tag = "3")]
331    pub replies: ::prost::alloc::vec::Vec<ReplyInfo>,
332    ///
333    #[prost(message, optional, tag = "4")]
334    pub activity: ::core::option::Option<Activity>,
335    ///
336    #[prost(message, optional, tag = "5")]
337    pub pagination_reply: ::core::option::Option<
338        super::super::super::super::pagination::FeedPaginationReply,
339    >,
340    ///
341    #[prost(string, tag = "6")]
342    pub session_id: ::prost::alloc::string::String,
343}
344///
345#[derive(Clone, PartialEq, ::prost::Message)]
346pub struct DialogListReq {
347    ///
348    #[prost(int64, tag = "1")]
349    pub oid: i64,
350    ///
351    #[prost(int64, tag = "2")]
352    pub r#type: i64,
353    ///
354    #[prost(int64, tag = "3")]
355    pub root: i64,
356    ///
357    #[prost(int64, tag = "4")]
358    pub dialog: i64,
359    ///
360    #[prost(message, optional, tag = "5")]
361    pub cursor: ::core::option::Option<CursorReq>,
362    ///
363    #[prost(message, optional, tag = "6")]
364    pub pagination: ::core::option::Option<
365        super::super::super::super::pagination::FeedPagination,
366    >,
367    ///
368    #[prost(string, tag = "7")]
369    pub extra: ::prost::alloc::string::String,
370}
371///
372#[derive(Clone, Copy, PartialEq, ::prost::Message)]
373pub struct DoVoteReq {
374    ///
375    #[prost(int64, tag = "1")]
376    pub oid: i64,
377    ///
378    #[prost(int64, tag = "2")]
379    pub r#type: i64,
380    ///
381    #[prost(int64, tag = "3")]
382    pub vote_id: i64,
383    ///
384    #[prost(int64, tag = "4")]
385    pub option: i64,
386}
387///
388#[derive(Clone, Copy, PartialEq, ::prost::Message)]
389pub struct DoVoteResp {}
390///
391#[derive(Clone, PartialEq, ::prost::Message)]
392pub struct ESportsGradeCard {
393    ///
394    #[prost(string, tag = "1")]
395    pub title: ::prost::alloc::string::String,
396    ///
397    #[prost(string, tag = "2")]
398    pub description: ::prost::alloc::string::String,
399    ///
400    #[prost(string, tag = "3")]
401    pub image: ::prost::alloc::string::String,
402    ///
403    #[prost(string, tag = "4")]
404    pub link: ::prost::alloc::string::String,
405}
406///
407#[derive(Clone, PartialEq, ::prost::Message)]
408pub struct Effects {
409    ///
410    #[prost(string, tag = "1")]
411    pub preloading: ::prost::alloc::string::String,
412}
413///
414#[derive(Clone, PartialEq, ::prost::Message)]
415pub struct Emote {
416    ///
417    #[prost(int64, tag = "1")]
418    pub size: i64,
419    ///
420    #[prost(string, tag = "2")]
421    pub url: ::prost::alloc::string::String,
422    ///
423    #[prost(string, tag = "3")]
424    pub jump_url: ::prost::alloc::string::String,
425    ///
426    #[prost(string, tag = "4")]
427    pub jump_title: ::prost::alloc::string::String,
428    ///
429    #[prost(int64, tag = "5")]
430    pub id: i64,
431    ///
432    #[prost(int64, tag = "6")]
433    pub package_id: i64,
434    ///
435    #[prost(string, tag = "7")]
436    pub gif_url: ::prost::alloc::string::String,
437    ///
438    #[prost(string, tag = "8")]
439    pub text: ::prost::alloc::string::String,
440    ///
441    #[prost(string, tag = "9")]
442    pub webp_url: ::prost::alloc::string::String,
443}
444///
445#[derive(Clone, PartialEq, ::prost::Message)]
446pub struct EmptyPage {
447    ///
448    #[prost(string, tag = "1")]
449    pub image_url: ::prost::alloc::string::String,
450    ///
451    #[prost(message, repeated, tag = "2")]
452    pub texts: ::prost::alloc::vec::Vec<empty_page::Text>,
453    ///
454    #[prost(message, optional, tag = "3")]
455    pub left_button: ::core::option::Option<empty_page::Button>,
456    ///
457    #[prost(message, optional, tag = "4")]
458    pub right_button: ::core::option::Option<empty_page::Button>,
459}
460/// Nested message and enum types in `EmptyPage`.
461pub mod empty_page {
462    ///
463    #[derive(Clone, PartialEq, ::prost::Message)]
464    pub struct Button {
465        ///
466        #[prost(string, tag = "1")]
467        pub title: ::prost::alloc::string::String,
468        ///
469        #[prost(enumeration = "Action", tag = "2")]
470        pub action: i32,
471    }
472    ///
473    #[derive(Clone, PartialEq, ::prost::Message)]
474    pub struct Text {
475        ///
476        #[prost(string, tag = "1")]
477        pub raw: ::prost::alloc::string::String,
478        ///
479        #[prost(message, optional, tag = "2")]
480        pub style: ::core::option::Option<super::TextStyle>,
481        ///
482        #[prost(enumeration = "Action", tag = "3")]
483        pub action: i32,
484    }
485    ///
486    #[derive(
487        Clone,
488        Copy,
489        Debug,
490        PartialEq,
491        Eq,
492        Hash,
493        PartialOrd,
494        Ord,
495        ::prost::Enumeration
496    )]
497    #[repr(i32)]
498    pub enum Action {
499        ///
500        Unavailable = 0,
501        ///
502        ShowKeyboard = 1,
503        ///
504        SendReplyWithBoldText = 2,
505    }
506    impl Action {
507        /// String value of the enum field names used in the ProtoBuf definition.
508        ///
509        /// The values are not transformed in any way and thus are considered stable
510        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
511        pub fn as_str_name(&self) -> &'static str {
512            match self {
513                Self::Unavailable => "UNAVAILABLE",
514                Self::ShowKeyboard => "SHOW_KEYBOARD",
515                Self::SendReplyWithBoldText => "SEND_REPLY_WITH_BOLD_TEXT",
516            }
517        }
518        /// Creates an enum from field names used in the ProtoBuf definition.
519        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
520            match value {
521                "UNAVAILABLE" => Some(Self::Unavailable),
522                "SHOW_KEYBOARD" => Some(Self::ShowKeyboard),
523                "SEND_REPLY_WITH_BOLD_TEXT" => Some(Self::SendReplyWithBoldText),
524                _ => None,
525            }
526        }
527    }
528}
529///
530#[derive(Clone, PartialEq, ::prost::Message)]
531pub struct Form {
532    ///
533    #[prost(int32, tag = "1")]
534    pub r#type: i32,
535    ///
536    #[prost(message, repeated, tag = "2")]
537    pub options: ::prost::alloc::vec::Vec<QoeOption>,
538}
539///
540#[derive(Clone, PartialEq, ::prost::Message)]
541pub struct GoodsSearchItem {
542    ///
543    #[prost(int64, tag = "1")]
544    pub id: i64,
545    ///
546    #[prost(string, tag = "2")]
547    pub name: ::prost::alloc::string::String,
548    ///
549    #[prost(string, tag = "3")]
550    pub price: ::prost::alloc::string::String,
551    ///
552    #[prost(string, tag = "4")]
553    pub income: ::prost::alloc::string::String,
554    ///
555    #[prost(string, tag = "5")]
556    pub img: ::prost::alloc::string::String,
557    ///
558    #[prost(string, tag = "6")]
559    pub label: ::prost::alloc::string::String,
560}
561///
562#[derive(Clone, PartialEq, ::prost::Message)]
563pub struct LikeInfo {
564    ///
565    #[prost(message, repeated, tag = "1")]
566    pub items: ::prost::alloc::vec::Vec<like_info::Item>,
567    ///
568    #[prost(string, tag = "2")]
569    pub title: ::prost::alloc::string::String,
570}
571/// Nested message and enum types in `LikeInfo`.
572pub mod like_info {
573    ///
574    #[derive(Clone, PartialEq, ::prost::Message)]
575    pub struct Item {
576        ///
577        #[prost(message, optional, tag = "1")]
578        pub member: ::core::option::Option<super::Member>,
579    }
580}
581///
582#[derive(Clone, PartialEq, ::prost::Message)]
583pub struct Lottery {
584    ///
585    #[prost(int64, tag = "1")]
586    pub lottery_id: i64,
587    ///
588    #[prost(int64, tag = "2")]
589    pub lottery_status: i64,
590    ///
591    #[prost(int64, tag = "3")]
592    pub lottery_mid: i64,
593    ///
594    #[prost(int64, tag = "4")]
595    pub lottery_time: i64,
596    ///
597    #[prost(int64, tag = "5")]
598    pub oid: i64,
599    ///
600    #[prost(int64, tag = "6")]
601    pub r#type: i64,
602    ///
603    #[prost(int64, tag = "7")]
604    pub ctime: i64,
605    ///
606    #[prost(message, optional, tag = "8")]
607    pub content: ::core::option::Option<Content>,
608    ///
609    #[prost(message, optional, tag = "9")]
610    pub member: ::core::option::Option<Member>,
611    ///
612    #[prost(message, optional, tag = "10")]
613    pub reply_control: ::core::option::Option<ReplyControl>,
614}
615///
616#[derive(Clone, PartialEq, ::prost::Message)]
617pub struct MainListReply {
618    ///
619    #[prost(message, optional, tag = "1")]
620    pub cursor: ::core::option::Option<CursorReply>,
621    ///
622    #[prost(message, repeated, tag = "2")]
623    pub replies: ::prost::alloc::vec::Vec<ReplyInfo>,
624    ///
625    #[prost(message, optional, tag = "3")]
626    pub subject_control: ::core::option::Option<SubjectControl>,
627    ///
628    #[prost(message, optional, tag = "4")]
629    pub up_top: ::core::option::Option<ReplyInfo>,
630    ///
631    #[prost(message, optional, tag = "5")]
632    pub admin_top: ::core::option::Option<ReplyInfo>,
633    ///
634    #[prost(message, optional, tag = "6")]
635    pub vote_top: ::core::option::Option<ReplyInfo>,
636    ///
637    #[prost(message, optional, tag = "7")]
638    pub notice: ::core::option::Option<Notice>,
639    ///
640    #[prost(message, optional, tag = "8")]
641    pub lottery: ::core::option::Option<Lottery>,
642    ///
643    #[prost(message, optional, tag = "9")]
644    pub activity: ::core::option::Option<Activity>,
645    ///
646    #[prost(message, optional, tag = "10")]
647    pub up_selection: ::core::option::Option<UpSelection>,
648    ///
649    #[prost(message, optional, tag = "11")]
650    pub cm: ::core::option::Option<Cm>,
651    ///
652    #[prost(message, optional, tag = "12")]
653    pub effects: ::core::option::Option<Effects>,
654    ///
655    #[prost(message, optional, tag = "13")]
656    pub operation: ::core::option::Option<Operation>,
657    ///
658    #[prost(message, repeated, tag = "14")]
659    pub top_replies: ::prost::alloc::vec::Vec<ReplyInfo>,
660    ///
661    #[prost(message, optional, tag = "15")]
662    pub qoe: ::core::option::Option<QoeInfo>,
663    ///
664    #[prost(map = "string, int32", tag = "16")]
665    pub callbacks: ::std::collections::HashMap<::prost::alloc::string::String, i32>,
666    ///
667    #[prost(message, optional, tag = "17")]
668    pub operation_v2: ::core::option::Option<OperationV2>,
669    ///
670    #[prost(enumeration = "Mode", tag = "18")]
671    pub mode: i32,
672    ///
673    #[prost(string, tag = "19")]
674    pub mode_text: ::prost::alloc::string::String,
675    ///
676    #[prost(message, optional, tag = "20")]
677    pub pagination_reply: ::core::option::Option<
678        super::super::super::super::pagination::FeedPaginationReply,
679    >,
680    ///
681    #[prost(string, tag = "21")]
682    pub session_id: ::prost::alloc::string::String,
683    ///
684    #[prost(string, tag = "22")]
685    pub report_params: ::prost::alloc::string::String,
686    ///
687    #[prost(message, optional, tag = "23")]
688    pub vote_card: ::core::option::Option<VoteCard>,
689    ///
690    #[prost(message, optional, tag = "24")]
691    pub esports_grade_card: ::core::option::Option<ESportsGradeCard>,
692    ///
693    #[prost(string, tag = "25")]
694    pub context_feature: ::prost::alloc::string::String,
695    ///
696    #[prost(string, tag = "26")]
697    pub pagination_end_text: ::prost::alloc::string::String,
698    ///
699    #[prost(message, repeated, tag = "27")]
700    pub mixed_cards: ::prost::alloc::vec::Vec<MixedCard>,
701}
702///
703#[derive(Clone, PartialEq, ::prost::Message)]
704pub struct MainListReq {
705    ///
706    #[prost(int64, tag = "1")]
707    pub oid: i64,
708    ///
709    #[prost(int64, tag = "2")]
710    pub r#type: i64,
711    ///
712    #[prost(message, optional, tag = "3")]
713    pub cursor: ::core::option::Option<CursorReq>,
714    ///
715    #[prost(string, tag = "4")]
716    pub extra: ::prost::alloc::string::String,
717    ///
718    #[prost(string, tag = "5")]
719    pub ad_extra: ::prost::alloc::string::String,
720    ///
721    #[prost(int64, tag = "6")]
722    pub rpid: i64,
723    ///
724    #[prost(int64, tag = "7")]
725    pub seek_rpid: i64,
726    ///
727    #[prost(string, tag = "8")]
728    pub filter_tag_name: ::prost::alloc::string::String,
729    ///
730    #[prost(enumeration = "Mode", tag = "9")]
731    pub mode: i32,
732    ///
733    #[prost(message, optional, tag = "10")]
734    pub pagination: ::core::option::Option<
735        super::super::super::super::pagination::FeedPagination,
736    >,
737    ///
738    #[prost(int64, repeated, tag = "11")]
739    pub client_recall_rpids: ::prost::alloc::vec::Vec<i64>,
740    ///
741    #[prost(message, optional, tag = "12")]
742    pub word_search_param: ::core::option::Option<WordSearchParam>,
743}
744///
745#[derive(Clone, PartialEq, ::prost::Message)]
746pub struct Member {
747    ///
748    #[prost(int64, tag = "1")]
749    pub mid: i64,
750    ///
751    #[prost(string, tag = "2")]
752    pub name: ::prost::alloc::string::String,
753    ///
754    #[prost(string, tag = "3")]
755    pub sex: ::prost::alloc::string::String,
756    ///
757    #[prost(string, tag = "4")]
758    pub face: ::prost::alloc::string::String,
759    ///
760    #[prost(int64, tag = "5")]
761    pub level: i64,
762    ///
763    #[prost(int64, tag = "6")]
764    pub official_verify_type: i64,
765    ///
766    #[prost(int64, tag = "7")]
767    pub vip_type: i64,
768    ///
769    #[prost(int64, tag = "8")]
770    pub vip_status: i64,
771    ///
772    #[prost(int64, tag = "9")]
773    pub vip_theme_type: i64,
774    ///
775    #[prost(string, tag = "10")]
776    pub vip_label_path: ::prost::alloc::string::String,
777    ///
778    #[prost(string, tag = "11")]
779    pub garb_pendant_image: ::prost::alloc::string::String,
780    ///
781    #[prost(string, tag = "12")]
782    pub garb_card_image: ::prost::alloc::string::String,
783    ///
784    #[prost(string, tag = "13")]
785    pub garb_card_image_with_focus: ::prost::alloc::string::String,
786    ///
787    #[prost(string, tag = "14")]
788    pub garb_card_jump_url: ::prost::alloc::string::String,
789    ///
790    #[prost(string, tag = "15")]
791    pub garb_card_number: ::prost::alloc::string::String,
792    ///
793    #[prost(string, tag = "16")]
794    pub garb_card_fan_color: ::prost::alloc::string::String,
795    ///
796    #[prost(bool, tag = "17")]
797    pub garb_card_is_fan: bool,
798    ///
799    #[prost(string, tag = "18")]
800    pub fans_medal_name: ::prost::alloc::string::String,
801    ///
802    #[prost(int64, tag = "19")]
803    pub fans_medal_level: i64,
804    ///
805    #[prost(int64, tag = "20")]
806    pub fans_medal_color: i64,
807    ///
808    #[prost(string, tag = "21")]
809    pub vip_nickname_color: ::prost::alloc::string::String,
810    ///
811    #[prost(int32, tag = "22")]
812    pub vip_avatar_subscript: i32,
813    ///
814    #[prost(string, tag = "23")]
815    pub vip_label_text: ::prost::alloc::string::String,
816    ///
817    #[prost(string, tag = "24")]
818    pub vip_label_theme: ::prost::alloc::string::String,
819    ///
820    #[prost(int64, tag = "25")]
821    pub fans_medal_color_end: i64,
822    ///
823    #[prost(int64, tag = "26")]
824    pub fans_medal_color_border: i64,
825    ///
826    #[prost(int64, tag = "27")]
827    pub fans_medal_color_name: i64,
828    ///
829    #[prost(int64, tag = "28")]
830    pub fans_medal_color_level: i64,
831    ///
832    #[prost(int64, tag = "29")]
833    pub fans_guard_level: i64,
834    ///
835    #[prost(int32, tag = "30")]
836    pub face_nft: i32,
837    ///
838    #[prost(int32, tag = "31")]
839    pub face_nft_new: i32,
840    ///
841    #[prost(int32, tag = "32")]
842    pub is_senior_member: i32,
843    ///
844    #[prost(message, optional, tag = "33")]
845    pub nft_interaction: ::core::option::Option<member::NftInteraction>,
846    ///
847    #[prost(string, tag = "34")]
848    pub fans_guard_icon: ::prost::alloc::string::String,
849    ///
850    #[prost(string, tag = "35")]
851    pub fans_honor_icon: ::prost::alloc::string::String,
852}
853/// Nested message and enum types in `Member`.
854pub mod member {
855    ///
856    #[derive(Clone, PartialEq, ::prost::Message)]
857    pub struct NftInteraction {
858        ///
859        #[prost(string, tag = "1")]
860        pub itype: ::prost::alloc::string::String,
861        ///
862        #[prost(string, tag = "2")]
863        pub metadata_url: ::prost::alloc::string::String,
864        ///
865        #[prost(string, tag = "3")]
866        pub nft_id: ::prost::alloc::string::String,
867        ///
868        #[prost(message, optional, tag = "4")]
869        pub region: ::core::option::Option<nft_interaction::Region>,
870    }
871    /// Nested message and enum types in `NftInteraction`.
872    pub mod nft_interaction {
873        ///
874        #[derive(Clone, PartialEq, ::prost::Message)]
875        pub struct Region {
876            ///
877            #[prost(enumeration = "RegionType", tag = "1")]
878            pub r#type: i32,
879            ///
880            #[prost(string, tag = "2")]
881            pub icon: ::prost::alloc::string::String,
882            ///
883            #[prost(enumeration = "ShowStatus", tag = "3")]
884            pub show_status: i32,
885        }
886        ///
887        #[derive(
888            Clone,
889            Copy,
890            Debug,
891            PartialEq,
892            Eq,
893            Hash,
894            PartialOrd,
895            Ord,
896            ::prost::Enumeration
897        )]
898        #[repr(i32)]
899        pub enum RegionType {
900            ///
901            Default = 0,
902            ///
903            Mainland = 1,
904            ///
905            Gat = 2,
906        }
907        impl RegionType {
908            /// String value of the enum field names used in the ProtoBuf definition.
909            ///
910            /// The values are not transformed in any way and thus are considered stable
911            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
912            pub fn as_str_name(&self) -> &'static str {
913                match self {
914                    Self::Default => "DEFAULT",
915                    Self::Mainland => "MAINLAND",
916                    Self::Gat => "GAT",
917                }
918            }
919            /// Creates an enum from field names used in the ProtoBuf definition.
920            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
921                match value {
922                    "DEFAULT" => Some(Self::Default),
923                    "MAINLAND" => Some(Self::Mainland),
924                    "GAT" => Some(Self::Gat),
925                    _ => None,
926                }
927            }
928        }
929        ///
930        #[derive(
931            Clone,
932            Copy,
933            Debug,
934            PartialEq,
935            Eq,
936            Hash,
937            PartialOrd,
938            Ord,
939            ::prost::Enumeration
940        )]
941        #[repr(i32)]
942        pub enum ShowStatus {
943            ///
944            Showdefault = 0,
945            ///
946            Zoominmainland = 1,
947            ///
948            Raw = 2,
949        }
950        impl ShowStatus {
951            /// String value of the enum field names used in the ProtoBuf definition.
952            ///
953            /// The values are not transformed in any way and thus are considered stable
954            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
955            pub fn as_str_name(&self) -> &'static str {
956                match self {
957                    Self::Showdefault => "SHOWDEFAULT",
958                    Self::Zoominmainland => "ZOOMINMAINLAND",
959                    Self::Raw => "RAW",
960                }
961            }
962            /// Creates an enum from field names used in the ProtoBuf definition.
963            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
964                match value {
965                    "SHOWDEFAULT" => Some(Self::Showdefault),
966                    "ZOOMINMAINLAND" => Some(Self::Zoominmainland),
967                    "RAW" => Some(Self::Raw),
968                    _ => None,
969                }
970            }
971        }
972    }
973}
974///
975#[derive(Clone, PartialEq, ::prost::Message)]
976pub struct MemberV2 {
977    ///
978    #[prost(message, optional, tag = "1")]
979    pub basic: ::core::option::Option<member_v2::Basic>,
980    ///
981    #[prost(message, optional, tag = "2")]
982    pub official: ::core::option::Option<member_v2::Official>,
983    ///
984    #[prost(message, optional, tag = "3")]
985    pub vip: ::core::option::Option<member_v2::Vip>,
986    ///
987    #[prost(message, optional, tag = "4")]
988    pub garb: ::core::option::Option<member_v2::Garb>,
989    ///
990    #[prost(message, optional, tag = "5")]
991    pub medal: ::core::option::Option<member_v2::Medal>,
992    ///
993    #[prost(message, optional, tag = "6")]
994    pub nft: ::core::option::Option<member_v2::Nft>,
995    ///
996    #[prost(message, optional, tag = "7")]
997    pub senior: ::core::option::Option<member_v2::Senior>,
998    ///
999    #[prost(message, optional, tag = "8")]
1000    pub contractor: ::core::option::Option<member_v2::Contractor>,
1001    ///
1002    #[prost(message, optional, tag = "9")]
1003    pub user_sailing: ::core::option::Option<
1004        super::super::super::super::vas::garb::model::UserSailing,
1005    >,
1006}
1007/// Nested message and enum types in `MemberV2`.
1008pub mod member_v2 {
1009    ///
1010    #[derive(Clone, PartialEq, ::prost::Message)]
1011    pub struct Basic {
1012        ///
1013        #[prost(int64, tag = "1")]
1014        pub mid: i64,
1015        ///
1016        #[prost(string, tag = "2")]
1017        pub name: ::prost::alloc::string::String,
1018        ///
1019        #[prost(string, tag = "3")]
1020        pub sex: ::prost::alloc::string::String,
1021        ///
1022        #[prost(string, tag = "4")]
1023        pub face: ::prost::alloc::string::String,
1024        ///
1025        #[prost(int64, tag = "5")]
1026        pub level: i64,
1027        ///
1028        #[prost(message, optional, tag = "6")]
1029        pub avatar_item: ::core::option::Option<
1030            super::super::super::super::super::dagw::component::avatar::v1::AvatarItem,
1031        >,
1032        ///
1033        #[prost(message, optional, tag = "7")]
1034        pub name_render: ::core::option::Option<
1035            super::super::super::super::super::account::service::v1::NameRender,
1036        >,
1037    }
1038    ///
1039    #[derive(Clone, PartialEq, ::prost::Message)]
1040    pub struct Contractor {
1041        ///
1042        #[prost(bool, tag = "1")]
1043        pub is_contractor: bool,
1044        ///
1045        #[prost(string, tag = "2")]
1046        pub contract_desc: ::prost::alloc::string::String,
1047    }
1048    ///
1049    #[derive(Clone, PartialEq, ::prost::Message)]
1050    pub struct Garb {
1051        ///
1052        #[prost(string, tag = "1")]
1053        pub pendant_image: ::prost::alloc::string::String,
1054        ///
1055        #[prost(string, tag = "2")]
1056        pub card_image: ::prost::alloc::string::String,
1057        ///
1058        #[prost(string, tag = "3")]
1059        pub card_image_with_focus: ::prost::alloc::string::String,
1060        ///
1061        #[prost(string, tag = "4")]
1062        pub card_jump_url: ::prost::alloc::string::String,
1063        ///
1064        #[prost(string, tag = "5")]
1065        pub card_number: ::prost::alloc::string::String,
1066        ///
1067        #[prost(string, tag = "6")]
1068        pub card_fan_color: ::prost::alloc::string::String,
1069        ///
1070        #[prost(bool, tag = "7")]
1071        pub card_is_fan: bool,
1072        ///
1073        #[prost(string, tag = "8")]
1074        pub fan_num_prefix: ::prost::alloc::string::String,
1075        ///
1076        #[prost(message, optional, tag = "9")]
1077        pub fan_num_color_format: ::core::option::Option<garb::FanNumColorFormat>,
1078    }
1079    /// Nested message and enum types in `Garb`.
1080    pub mod garb {
1081        ///
1082        #[derive(Clone, PartialEq, ::prost::Message)]
1083        pub struct FanNumColorFormat {
1084            ///
1085            #[prost(string, tag = "1")]
1086            pub start_point: ::prost::alloc::string::String,
1087            ///
1088            #[prost(string, tag = "2")]
1089            pub end_point: ::prost::alloc::string::String,
1090            ///
1091            #[prost(string, repeated, tag = "3")]
1092            pub colors: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1093            ///
1094            #[prost(int64, repeated, tag = "4")]
1095            pub gradients: ::prost::alloc::vec::Vec<i64>,
1096        }
1097    }
1098    ///
1099    #[derive(Clone, PartialEq, ::prost::Message)]
1100    pub struct Medal {
1101        ///
1102        #[prost(string, tag = "1")]
1103        pub name: ::prost::alloc::string::String,
1104        ///
1105        #[prost(int64, tag = "2")]
1106        pub level: i64,
1107        ///
1108        #[prost(int64, tag = "3")]
1109        pub color_start: i64,
1110        ///
1111        #[prost(int64, tag = "4")]
1112        pub color_end: i64,
1113        ///
1114        #[prost(int64, tag = "5")]
1115        pub color_border: i64,
1116        ///
1117        #[prost(int64, tag = "6")]
1118        pub color_name: i64,
1119        ///
1120        #[prost(int64, tag = "7")]
1121        pub color_level: i64,
1122        ///
1123        #[prost(int64, tag = "8")]
1124        pub guard_level: i64,
1125        ///
1126        #[prost(string, tag = "9")]
1127        pub first_icon: ::prost::alloc::string::String,
1128        ///
1129        #[prost(string, tag = "10")]
1130        pub second_icon: ::prost::alloc::string::String,
1131        ///
1132        #[prost(int64, tag = "11")]
1133        pub level_bg_color: i64,
1134    }
1135    ///
1136    #[derive(Clone, PartialEq, ::prost::Message)]
1137    pub struct Nft {
1138        ///
1139        #[prost(int32, tag = "1")]
1140        pub face: i32,
1141        ///
1142        #[prost(message, optional, tag = "2")]
1143        pub interaction: ::core::option::Option<nft::Interaction>,
1144    }
1145    /// Nested message and enum types in `Nft`.
1146    pub mod nft {
1147        ///
1148        #[derive(Clone, PartialEq, ::prost::Message)]
1149        pub struct Interaction {
1150            ///
1151            #[prost(string, tag = "1")]
1152            pub itype: ::prost::alloc::string::String,
1153            ///
1154            #[prost(string, tag = "2")]
1155            pub metadata_url: ::prost::alloc::string::String,
1156            ///
1157            #[prost(string, tag = "3")]
1158            pub nft_id: ::prost::alloc::string::String,
1159            ///
1160            #[prost(message, optional, tag = "4")]
1161            pub region: ::core::option::Option<interaction::Region>,
1162        }
1163        /// Nested message and enum types in `Interaction`.
1164        pub mod interaction {
1165            ///
1166            #[derive(Clone, PartialEq, ::prost::Message)]
1167            pub struct Region {
1168                ///
1169                #[prost(enumeration = "RegionType", tag = "1")]
1170                pub r#type: i32,
1171                ///
1172                #[prost(string, tag = "2")]
1173                pub icon: ::prost::alloc::string::String,
1174                ///
1175                #[prost(enumeration = "ShowStatus", tag = "3")]
1176                pub show_status: i32,
1177            }
1178            ///
1179            #[derive(
1180                Clone,
1181                Copy,
1182                Debug,
1183                PartialEq,
1184                Eq,
1185                Hash,
1186                PartialOrd,
1187                Ord,
1188                ::prost::Enumeration
1189            )]
1190            #[repr(i32)]
1191            pub enum RegionType {
1192                ///
1193                DefaultRegionType = 0,
1194                ///
1195                MainlandRegionType = 1,
1196                ///
1197                GatRegionType = 2,
1198            }
1199            impl RegionType {
1200                /// String value of the enum field names used in the ProtoBuf definition.
1201                ///
1202                /// The values are not transformed in any way and thus are considered stable
1203                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1204                pub fn as_str_name(&self) -> &'static str {
1205                    match self {
1206                        Self::DefaultRegionType => "DEFAULT_RegionType",
1207                        Self::MainlandRegionType => "MAINLAND_RegionType",
1208                        Self::GatRegionType => "GAT_RegionType",
1209                    }
1210                }
1211                /// Creates an enum from field names used in the ProtoBuf definition.
1212                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1213                    match value {
1214                        "DEFAULT_RegionType" => Some(Self::DefaultRegionType),
1215                        "MAINLAND_RegionType" => Some(Self::MainlandRegionType),
1216                        "GAT_RegionType" => Some(Self::GatRegionType),
1217                        _ => None,
1218                    }
1219                }
1220            }
1221            ///
1222            #[derive(
1223                Clone,
1224                Copy,
1225                Debug,
1226                PartialEq,
1227                Eq,
1228                Hash,
1229                PartialOrd,
1230                Ord,
1231                ::prost::Enumeration
1232            )]
1233            #[repr(i32)]
1234            pub enum ShowStatus {
1235                ///
1236                ShowdefaultShowStatus = 0,
1237                ///
1238                ZoominmainlandShowStatus = 1,
1239                ///
1240                RawShowStatus = 2,
1241            }
1242            impl ShowStatus {
1243                /// String value of the enum field names used in the ProtoBuf definition.
1244                ///
1245                /// The values are not transformed in any way and thus are considered stable
1246                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1247                pub fn as_str_name(&self) -> &'static str {
1248                    match self {
1249                        Self::ShowdefaultShowStatus => "SHOWDEFAULT_ShowStatus",
1250                        Self::ZoominmainlandShowStatus => "ZOOMINMAINLAND_ShowStatus",
1251                        Self::RawShowStatus => "RAW_ShowStatus",
1252                    }
1253                }
1254                /// Creates an enum from field names used in the ProtoBuf definition.
1255                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1256                    match value {
1257                        "SHOWDEFAULT_ShowStatus" => Some(Self::ShowdefaultShowStatus),
1258                        "ZOOMINMAINLAND_ShowStatus" => {
1259                            Some(Self::ZoominmainlandShowStatus)
1260                        }
1261                        "RAW_ShowStatus" => Some(Self::RawShowStatus),
1262                        _ => None,
1263                    }
1264                }
1265            }
1266        }
1267    }
1268    ///
1269    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1270    pub struct Official {
1271        ///
1272        #[prost(int64, tag = "1")]
1273        pub verify_type: i64,
1274    }
1275    ///
1276    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1277    pub struct Senior {
1278        ///
1279        #[prost(int32, tag = "1")]
1280        pub is_senior_member: i32,
1281        ///
1282        #[prost(enumeration = "senior::Status", tag = "2")]
1283        pub status: i32,
1284    }
1285    /// Nested message and enum types in `Senior`.
1286    pub mod senior {
1287        ///
1288        #[derive(
1289            Clone,
1290            Copy,
1291            Debug,
1292            PartialEq,
1293            Eq,
1294            Hash,
1295            PartialOrd,
1296            Ord,
1297            ::prost::Enumeration
1298        )]
1299        #[repr(i32)]
1300        pub enum Status {
1301            ///
1302            Normal = 0,
1303            ///
1304            Pending = 1,
1305            ///
1306            Senior = 2,
1307            ///
1308            WillExpire = 3,
1309            ///
1310            Expired = 4,
1311        }
1312        impl Status {
1313            /// String value of the enum field names used in the ProtoBuf definition.
1314            ///
1315            /// The values are not transformed in any way and thus are considered stable
1316            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1317            pub fn as_str_name(&self) -> &'static str {
1318                match self {
1319                    Self::Normal => "Normal",
1320                    Self::Pending => "Pending",
1321                    Self::Senior => "Senior",
1322                    Self::WillExpire => "WillExpire",
1323                    Self::Expired => "Expired",
1324                }
1325            }
1326            /// Creates an enum from field names used in the ProtoBuf definition.
1327            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1328                match value {
1329                    "Normal" => Some(Self::Normal),
1330                    "Pending" => Some(Self::Pending),
1331                    "Senior" => Some(Self::Senior),
1332                    "WillExpire" => Some(Self::WillExpire),
1333                    "Expired" => Some(Self::Expired),
1334                    _ => None,
1335                }
1336            }
1337        }
1338    }
1339    ///
1340    #[derive(Clone, PartialEq, ::prost::Message)]
1341    pub struct Vip {
1342        ///
1343        #[prost(int64, tag = "1")]
1344        pub r#type: i64,
1345        ///
1346        #[prost(int64, tag = "2")]
1347        pub status: i64,
1348        ///
1349        #[prost(int64, tag = "3")]
1350        pub theme_type: i64,
1351        ///
1352        #[prost(string, tag = "4")]
1353        pub label_path: ::prost::alloc::string::String,
1354        ///
1355        #[prost(string, tag = "5")]
1356        pub nickname_color: ::prost::alloc::string::String,
1357        ///
1358        #[prost(int32, tag = "6")]
1359        pub avatar_subscript: i32,
1360        ///
1361        #[prost(string, tag = "7")]
1362        pub label_text: ::prost::alloc::string::String,
1363        ///
1364        #[prost(string, tag = "8")]
1365        pub vip_label_theme: ::prost::alloc::string::String,
1366    }
1367}
1368///
1369#[derive(Clone, PartialEq, ::prost::Message)]
1370pub struct MixedCard {
1371    ///
1372    #[prost(enumeration = "mixed_card::Type", tag = "1")]
1373    pub r#type: i32,
1374    ///
1375    #[prost(string, tag = "2")]
1376    pub oid: ::prost::alloc::string::String,
1377    ///
1378    #[prost(int64, tag = "3")]
1379    pub display_rank: i64,
1380    ///
1381    #[prost(oneof = "mixed_card::Item", tags = "4")]
1382    pub item: ::core::option::Option<mixed_card::Item>,
1383}
1384/// Nested message and enum types in `MixedCard`.
1385pub mod mixed_card {
1386    ///
1387    #[derive(
1388        Clone,
1389        Copy,
1390        Debug,
1391        PartialEq,
1392        Eq,
1393        Hash,
1394        PartialOrd,
1395        Ord,
1396        ::prost::Enumeration
1397    )]
1398    #[repr(i32)]
1399    pub enum Type {
1400        ///
1401        Unknown = 0,
1402        ///
1403        Question = 1,
1404    }
1405    impl Type {
1406        /// String value of the enum field names used in the ProtoBuf definition.
1407        ///
1408        /// The values are not transformed in any way and thus are considered stable
1409        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1410        pub fn as_str_name(&self) -> &'static str {
1411            match self {
1412                Self::Unknown => "UNKNOWN",
1413                Self::Question => "QUESTION",
1414            }
1415        }
1416        /// Creates an enum from field names used in the ProtoBuf definition.
1417        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1418            match value {
1419                "UNKNOWN" => Some(Self::Unknown),
1420                "QUESTION" => Some(Self::Question),
1421                _ => None,
1422            }
1423        }
1424    }
1425    ///
1426    #[derive(Clone, PartialEq, ::prost::Oneof)]
1427    pub enum Item {
1428        ///
1429        #[prost(message, tag = "4")]
1430        Question(super::QuestionCard),
1431    }
1432}
1433///
1434#[derive(Clone, PartialEq, ::prost::Message)]
1435pub struct Notice {
1436    ///
1437    #[prost(int64, tag = "1")]
1438    pub id: i64,
1439    ///
1440    #[prost(string, tag = "2")]
1441    pub content: ::prost::alloc::string::String,
1442    ///
1443    #[prost(string, tag = "3")]
1444    pub link: ::prost::alloc::string::String,
1445}
1446///
1447#[derive(Clone, PartialEq, ::prost::Message)]
1448pub struct Operation {
1449    ///
1450    #[prost(enumeration = "operation::Type", tag = "1")]
1451    pub r#type: i32,
1452    ///
1453    #[prost(int64, tag = "2")]
1454    pub id: i64,
1455    ///
1456    #[prost(message, optional, tag = "3")]
1457    pub title: ::core::option::Option<OperationTitle>,
1458    ///
1459    #[prost(message, optional, tag = "4")]
1460    pub subtitle: ::core::option::Option<OperationTitle>,
1461    ///
1462    #[prost(string, tag = "5")]
1463    pub link: ::prost::alloc::string::String,
1464    ///
1465    #[prost(string, tag = "6")]
1466    pub report_extra: ::prost::alloc::string::String,
1467    ///
1468    #[prost(string, tag = "7")]
1469    pub icon: ::prost::alloc::string::String,
1470}
1471/// Nested message and enum types in `Operation`.
1472pub mod operation {
1473    ///
1474    #[derive(
1475        Clone,
1476        Copy,
1477        Debug,
1478        PartialEq,
1479        Eq,
1480        Hash,
1481        PartialOrd,
1482        Ord,
1483        ::prost::Enumeration
1484    )]
1485    #[repr(i32)]
1486    pub enum Type {
1487        ///
1488        UnknownType = 0,
1489        ///
1490        Note = 1,
1491        ///
1492        Topic = 2,
1493        /// @Deprecated
1494        Notice = 3,
1495    }
1496    impl Type {
1497        /// String value of the enum field names used in the ProtoBuf definition.
1498        ///
1499        /// The values are not transformed in any way and thus are considered stable
1500        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1501        pub fn as_str_name(&self) -> &'static str {
1502            match self {
1503                Self::UnknownType => "UNKNOWN_Type",
1504                Self::Note => "NOTE",
1505                Self::Topic => "TOPIC",
1506                Self::Notice => "NOTICE",
1507            }
1508        }
1509        /// Creates an enum from field names used in the ProtoBuf definition.
1510        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1511            match value {
1512                "UNKNOWN_Type" => Some(Self::UnknownType),
1513                "NOTE" => Some(Self::Note),
1514                "TOPIC" => Some(Self::Topic),
1515                "NOTICE" => Some(Self::Notice),
1516                _ => None,
1517            }
1518        }
1519    }
1520}
1521///
1522#[derive(Clone, PartialEq, ::prost::Message)]
1523pub struct OperationTitle {
1524    ///
1525    #[prost(string, tag = "1")]
1526    pub content: ::prost::alloc::string::String,
1527    ///
1528    #[prost(bool, tag = "2")]
1529    pub is_highlight: bool,
1530}
1531///
1532#[derive(Clone, PartialEq, ::prost::Message)]
1533pub struct OperationV2 {
1534    ///
1535    #[prost(enumeration = "operation_v2::Type", tag = "1")]
1536    pub r#type: i32,
1537    ///
1538    #[prost(string, tag = "2")]
1539    pub prefix_text: ::prost::alloc::string::String,
1540    ///
1541    #[prost(message, optional, tag = "3")]
1542    pub icon: ::core::option::Option<operation_v2::Icon>,
1543    ///
1544    #[prost(string, tag = "4")]
1545    pub title: ::prost::alloc::string::String,
1546    ///
1547    #[prost(string, tag = "5")]
1548    pub link: ::prost::alloc::string::String,
1549    ///
1550    #[prost(string, tag = "6")]
1551    pub report_extra: ::prost::alloc::string::String,
1552}
1553/// Nested message and enum types in `OperationV2`.
1554pub mod operation_v2 {
1555    ///
1556    #[derive(Clone, PartialEq, ::prost::Message)]
1557    pub struct Icon {
1558        ///
1559        #[prost(enumeration = "icon::Position", tag = "1")]
1560        pub position: i32,
1561        ///
1562        #[prost(string, tag = "2")]
1563        pub url: ::prost::alloc::string::String,
1564    }
1565    /// Nested message and enum types in `Icon`.
1566    pub mod icon {
1567        ///
1568        #[derive(
1569            Clone,
1570            Copy,
1571            Debug,
1572            PartialEq,
1573            Eq,
1574            Hash,
1575            PartialOrd,
1576            Ord,
1577            ::prost::Enumeration
1578        )]
1579        #[repr(i32)]
1580        pub enum Position {
1581            ///
1582            Prefix = 0,
1583            ///
1584            Suffix = 1,
1585        }
1586        impl Position {
1587            /// String value of the enum field names used in the ProtoBuf definition.
1588            ///
1589            /// The values are not transformed in any way and thus are considered stable
1590            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1591            pub fn as_str_name(&self) -> &'static str {
1592                match self {
1593                    Self::Prefix => "PREFIX",
1594                    Self::Suffix => "SUFFIX",
1595                }
1596            }
1597            /// Creates an enum from field names used in the ProtoBuf definition.
1598            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1599                match value {
1600                    "PREFIX" => Some(Self::Prefix),
1601                    "SUFFIX" => Some(Self::Suffix),
1602                    _ => None,
1603                }
1604            }
1605        }
1606    }
1607    ///
1608    #[derive(
1609        Clone,
1610        Copy,
1611        Debug,
1612        PartialEq,
1613        Eq,
1614        Hash,
1615        PartialOrd,
1616        Ord,
1617        ::prost::Enumeration
1618    )]
1619    #[repr(i32)]
1620    pub enum Type {
1621        ///
1622        UnknownType = 0,
1623        ///
1624        NoteType = 1,
1625        ///
1626        TopicType = 2,
1627        ///
1628        Search = 4,
1629    }
1630    impl Type {
1631        /// String value of the enum field names used in the ProtoBuf definition.
1632        ///
1633        /// The values are not transformed in any way and thus are considered stable
1634        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1635        pub fn as_str_name(&self) -> &'static str {
1636            match self {
1637                Self::UnknownType => "UNKNOWN_Type",
1638                Self::NoteType => "NOTE_Type",
1639                Self::TopicType => "TOPIC_Type",
1640                Self::Search => "SEARCH",
1641            }
1642        }
1643        /// Creates an enum from field names used in the ProtoBuf definition.
1644        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1645            match value {
1646                "UNKNOWN_Type" => Some(Self::UnknownType),
1647                "NOTE_Type" => Some(Self::NoteType),
1648                "TOPIC_Type" => Some(Self::TopicType),
1649                "SEARCH" => Some(Self::Search),
1650                _ => None,
1651            }
1652        }
1653    }
1654}
1655///
1656#[derive(Clone, PartialEq, ::prost::Message)]
1657pub struct PgcVideoSearchItem {
1658    ///
1659    #[prost(string, tag = "1")]
1660    pub title: ::prost::alloc::string::String,
1661    ///
1662    #[prost(string, tag = "2")]
1663    pub category: ::prost::alloc::string::String,
1664    ///
1665    #[prost(string, tag = "3")]
1666    pub cover: ::prost::alloc::string::String,
1667}
1668///
1669#[derive(Clone, PartialEq, ::prost::Message)]
1670pub struct Picture {
1671    ///
1672    #[prost(string, tag = "1")]
1673    pub img_src: ::prost::alloc::string::String,
1674    ///
1675    #[prost(double, tag = "2")]
1676    pub img_width: f64,
1677    ///
1678    #[prost(double, tag = "3")]
1679    pub img_height: f64,
1680    ///
1681    #[prost(double, tag = "4")]
1682    pub img_size: f64,
1683    ///
1684    #[prost(string, tag = "5")]
1685    pub top_right_icon: ::prost::alloc::string::String,
1686    ///
1687    #[prost(bool, tag = "6")]
1688    pub play_gif_thumbnail: bool,
1689}
1690///
1691#[derive(Clone, PartialEq, ::prost::Message)]
1692pub struct PreviewListReply {
1693    ///
1694    #[prost(message, optional, tag = "1")]
1695    pub cursor: ::core::option::Option<CursorReply>,
1696    ///
1697    #[prost(message, repeated, tag = "2")]
1698    pub replies: ::prost::alloc::vec::Vec<ReplyInfo>,
1699    ///
1700    #[prost(message, optional, tag = "3")]
1701    pub subject_control: ::core::option::Option<SubjectControl>,
1702    ///
1703    #[prost(message, optional, tag = "4")]
1704    pub up_top: ::core::option::Option<ReplyInfo>,
1705    ///
1706    #[prost(message, optional, tag = "5")]
1707    pub admin_top: ::core::option::Option<ReplyInfo>,
1708    ///
1709    #[prost(message, optional, tag = "6")]
1710    pub vote_top: ::core::option::Option<ReplyInfo>,
1711}
1712///
1713#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1714pub struct PreviewListReq {
1715    ///
1716    #[prost(int64, tag = "1")]
1717    pub oid: i64,
1718    ///
1719    #[prost(int64, tag = "2")]
1720    pub r#type: i64,
1721    ///
1722    #[prost(message, optional, tag = "3")]
1723    pub cursor: ::core::option::Option<CursorReq>,
1724}
1725///
1726#[derive(Clone, PartialEq, ::prost::Message)]
1727pub struct QoeInfo {
1728    ///
1729    #[prost(int64, tag = "1")]
1730    pub id: i64,
1731    ///
1732    #[prost(int32, tag = "2")]
1733    pub r#type: i32,
1734    ///
1735    #[prost(int32, tag = "3")]
1736    pub style: i32,
1737    ///
1738    #[prost(string, tag = "4")]
1739    pub title: ::prost::alloc::string::String,
1740    ///
1741    #[prost(string, tag = "5")]
1742    pub feedback_title: ::prost::alloc::string::String,
1743    ///
1744    #[prost(message, repeated, tag = "6")]
1745    pub score_items: ::prost::alloc::vec::Vec<QoeScoreItem>,
1746    ///
1747    #[prost(int64, tag = "7")]
1748    pub display_rank: i64,
1749    ///
1750    #[prost(message, optional, tag = "8")]
1751    pub form: ::core::option::Option<Form>,
1752}
1753///
1754#[derive(Clone, PartialEq, ::prost::Message)]
1755pub struct QoeOption {
1756    ///
1757    #[prost(string, tag = "1")]
1758    pub title: ::prost::alloc::string::String,
1759    ///
1760    #[prost(float, tag = "2")]
1761    pub score: f32,
1762    ///
1763    #[prost(string, tag = "3")]
1764    pub img_url: ::prost::alloc::string::String,
1765    ///
1766    #[prost(string, repeated, tag = "4")]
1767    pub desc: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1768}
1769///
1770#[derive(Clone, PartialEq, ::prost::Message)]
1771pub struct QoeOptionDesc {
1772    ///
1773    #[prost(string, repeated, tag = "1")]
1774    pub desc: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1775}
1776///
1777#[derive(Clone, PartialEq, ::prost::Message)]
1778pub struct QoeScoreItem {
1779    ///
1780    #[prost(string, tag = "1")]
1781    pub title: ::prost::alloc::string::String,
1782    ///
1783    #[prost(string, tag = "2")]
1784    pub url: ::prost::alloc::string::String,
1785    ///
1786    #[prost(float, tag = "3")]
1787    pub score: f32,
1788}
1789///
1790#[derive(Clone, PartialEq, ::prost::Message)]
1791pub struct QuestionCard {
1792    ///
1793    #[prost(message, optional, tag = "1")]
1794    pub question: ::core::option::Option<question_card::Question>,
1795    ///
1796    #[prost(message, optional, tag = "2")]
1797    pub stat: ::core::option::Option<QuestionCardStat>,
1798    ///
1799    #[prost(string, tag = "3")]
1800    pub bottom_text: ::prost::alloc::string::String,
1801}
1802/// Nested message and enum types in `QuestionCard`.
1803pub mod question_card {
1804    ///
1805    #[derive(Clone, PartialEq, ::prost::Message)]
1806    pub struct Option {
1807        ///
1808        #[prost(string, tag = "1")]
1809        pub key: ::prost::alloc::string::String,
1810        ///
1811        #[prost(string, tag = "2")]
1812        pub title: ::prost::alloc::string::String,
1813    }
1814    ///
1815    #[derive(Clone, PartialEq, ::prost::Message)]
1816    pub struct Question {
1817        ///
1818        #[prost(int64, tag = "1")]
1819        pub qid: i64,
1820        ///
1821        #[prost(string, tag = "2")]
1822        pub title: ::prost::alloc::string::String,
1823        ///
1824        #[prost(bool, tag = "3")]
1825        pub must_right: bool,
1826        ///
1827        #[prost(message, repeated, tag = "4")]
1828        pub options: ::prost::alloc::vec::Vec<Option>,
1829    }
1830}
1831///
1832#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1833pub struct QuestionCardStat {
1834    ///
1835    #[prost(int64, tag = "1")]
1836    pub right_cnt: i64,
1837    ///
1838    #[prost(int64, tag = "2")]
1839    pub right_mid_cnt: i64,
1840    ///
1841    #[prost(int64, tag = "3")]
1842    pub submit_mid_cnt: i64,
1843}
1844///
1845#[derive(Clone, PartialEq, ::prost::Message)]
1846pub struct ReplyCardLabel {
1847    ///
1848    #[prost(string, tag = "1")]
1849    pub text_content: ::prost::alloc::string::String,
1850    ///
1851    #[prost(string, tag = "2")]
1852    pub text_color_day: ::prost::alloc::string::String,
1853    ///
1854    #[prost(string, tag = "3")]
1855    pub text_color_night: ::prost::alloc::string::String,
1856    ///
1857    #[prost(string, tag = "4")]
1858    pub label_color_day: ::prost::alloc::string::String,
1859    ///
1860    #[prost(string, tag = "5")]
1861    pub label_color_night: ::prost::alloc::string::String,
1862    ///
1863    #[prost(string, tag = "6")]
1864    pub image: ::prost::alloc::string::String,
1865    ///
1866    #[prost(enumeration = "reply_card_label::Type", tag = "7")]
1867    pub r#type: i32,
1868    ///
1869    #[prost(string, tag = "8")]
1870    pub background: ::prost::alloc::string::String,
1871    ///
1872    #[prost(double, tag = "9")]
1873    pub background_width: f64,
1874    ///
1875    #[prost(double, tag = "10")]
1876    pub background_height: f64,
1877    ///
1878    #[prost(string, tag = "11")]
1879    pub jump_url: ::prost::alloc::string::String,
1880    ///
1881    #[prost(int64, tag = "12")]
1882    pub effect: i64,
1883    ///
1884    #[prost(int64, tag = "13")]
1885    pub effect_start_time: i64,
1886}
1887/// Nested message and enum types in `ReplyCardLabel`.
1888pub mod reply_card_label {
1889    ///
1890    #[derive(
1891        Clone,
1892        Copy,
1893        Debug,
1894        PartialEq,
1895        Eq,
1896        Hash,
1897        PartialOrd,
1898        Ord,
1899        ::prost::Enumeration
1900    )]
1901    #[repr(i32)]
1902    pub enum Type {
1903        ///
1904        Underline = 0,
1905        ///
1906        Background = 1,
1907    }
1908    impl Type {
1909        /// String value of the enum field names used in the ProtoBuf definition.
1910        ///
1911        /// The values are not transformed in any way and thus are considered stable
1912        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1913        pub fn as_str_name(&self) -> &'static str {
1914            match self {
1915                Self::Underline => "UNDERLINE",
1916                Self::Background => "BACKGROUND",
1917            }
1918        }
1919        /// Creates an enum from field names used in the ProtoBuf definition.
1920        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1921            match value {
1922                "UNDERLINE" => Some(Self::Underline),
1923                "BACKGROUND" => Some(Self::Background),
1924                _ => None,
1925            }
1926        }
1927    }
1928}
1929///
1930#[derive(Clone, PartialEq, ::prost::Message)]
1931pub struct ReplyControl {
1932    ///
1933    #[prost(int64, tag = "1")]
1934    pub action: i64,
1935    ///
1936    #[prost(bool, tag = "2")]
1937    pub up_like: bool,
1938    ///
1939    #[prost(bool, tag = "3")]
1940    pub up_reply: bool,
1941    ///
1942    #[prost(bool, tag = "4")]
1943    pub show_follow_btn: bool,
1944    ///
1945    #[prost(bool, tag = "5")]
1946    pub is_assist: bool,
1947    ///
1948    #[prost(string, tag = "6")]
1949    pub label_text: ::prost::alloc::string::String,
1950    ///
1951    #[prost(bool, tag = "7")]
1952    pub following: bool,
1953    ///
1954    #[prost(bool, tag = "8")]
1955    pub followed: bool,
1956    ///
1957    #[prost(bool, tag = "9")]
1958    pub blocked: bool,
1959    ///
1960    #[prost(bool, tag = "10")]
1961    pub has_folded_reply: bool,
1962    ///
1963    #[prost(bool, tag = "11")]
1964    pub is_folded_reply: bool,
1965    ///
1966    #[prost(bool, tag = "12")]
1967    pub is_up_top: bool,
1968    ///
1969    #[prost(bool, tag = "13")]
1970    pub is_admin_top: bool,
1971    ///
1972    #[prost(bool, tag = "14")]
1973    pub is_vote_top: bool,
1974    ///
1975    #[prost(int64, tag = "15")]
1976    pub max_line: i64,
1977    ///
1978    #[prost(bool, tag = "16")]
1979    pub invisible: bool,
1980    ///
1981    #[prost(bool, tag = "17")]
1982    pub is_contractor: bool,
1983    ///
1984    #[prost(bool, tag = "18")]
1985    pub is_note: bool,
1986    ///
1987    #[prost(message, repeated, tag = "19")]
1988    pub card_labels: ::prost::alloc::vec::Vec<ReplyCardLabel>,
1989    ///
1990    #[prost(string, tag = "20")]
1991    pub sub_reply_entry_text: ::prost::alloc::string::String,
1992    ///
1993    #[prost(string, tag = "21")]
1994    pub sub_reply_title_text: ::prost::alloc::string::String,
1995    ///
1996    #[prost(string, tag = "22")]
1997    pub contract_desc: ::prost::alloc::string::String,
1998    ///
1999    #[prost(string, tag = "23")]
2000    pub time_desc: ::prost::alloc::string::String,
2001    ///
2002    #[prost(string, tag = "24")]
2003    pub biz_scene: ::prost::alloc::string::String,
2004    ///
2005    #[prost(string, tag = "25")]
2006    pub location: ::prost::alloc::string::String,
2007    ///
2008    #[prost(bool, tag = "26")]
2009    pub fold_pictures: bool,
2010    ///
2011    #[prost(bool, tag = "27")]
2012    pub is_note_v2: bool,
2013    ///
2014    #[prost(bool, tag = "28")]
2015    pub hide_note_icon: bool,
2016    ///
2017    #[prost(string, tag = "29")]
2018    pub cm_recommend_component: ::prost::alloc::string::String,
2019    ///
2020    #[prost(message, optional, tag = "30")]
2021    pub vote_option: ::core::option::Option<reply_control::VoteOption>,
2022    ///
2023    #[prost(string, tag = "31")]
2024    pub charged_desc: ::prost::alloc::string::String,
2025    ///
2026    #[prost(message, optional, tag = "32")]
2027    pub grade_record: ::core::option::Option<reply_control::GradeRecord>,
2028    ///
2029    #[prost(string, tag = "33")]
2030    pub preset_reply_text: ::prost::alloc::string::String,
2031    ///
2032    #[prost(message, optional, tag = "34")]
2033    pub easter_egg_label: ::core::option::Option<reply_control::EasterEggLabel>,
2034    ///
2035    #[prost(string, tag = "35")]
2036    pub context_feature: ::prost::alloc::string::String,
2037    ///
2038    #[prost(message, optional, tag = "36")]
2039    pub insert_effect: ::core::option::Option<reply_control::InsertEffect>,
2040}
2041/// Nested message and enum types in `ReplyControl`.
2042pub mod reply_control {
2043    ///
2044    #[derive(Clone, PartialEq, ::prost::Message)]
2045    pub struct EasterEggLabel {
2046        ///
2047        #[prost(string, tag = "1")]
2048        pub image: ::prost::alloc::string::String,
2049        ///
2050        #[prost(string, tag = "2")]
2051        pub jump_url: ::prost::alloc::string::String,
2052    }
2053    ///
2054    #[derive(Clone, PartialEq, ::prost::Message)]
2055    pub struct GradeRecord {
2056        ///
2057        #[prost(int32, tag = "1")]
2058        pub score: i32,
2059        ///
2060        #[prost(message, repeated, tag = "2")]
2061        pub texts: ::prost::alloc::vec::Vec<grade_record::Text>,
2062    }
2063    /// Nested message and enum types in `GradeRecord`.
2064    pub mod grade_record {
2065        ///
2066        #[derive(Clone, PartialEq, ::prost::Message)]
2067        pub struct Text {
2068            ///
2069            #[prost(string, tag = "1")]
2070            pub raw: ::prost::alloc::string::String,
2071            ///
2072            #[prost(message, optional, tag = "2")]
2073            pub style: ::core::option::Option<super::super::TextStyle>,
2074        }
2075    }
2076    ///
2077    #[derive(Clone, PartialEq, ::prost::Message)]
2078    pub struct InsertEffect {
2079        ///
2080        #[prost(string, tag = "1")]
2081        pub content: ::prost::alloc::string::String,
2082        ///
2083        #[prost(string, tag = "2")]
2084        pub icon: ::prost::alloc::string::String,
2085    }
2086    ///
2087    #[derive(Clone, PartialEq, ::prost::Message)]
2088    pub struct VoteOption {
2089        ///
2090        #[prost(enumeration = "vote_option::LabelKind", tag = "1")]
2091        pub label_kind: i32,
2092        ///
2093        #[prost(string, tag = "2")]
2094        pub desc: ::prost::alloc::string::String,
2095        ///
2096        #[prost(int64, tag = "3")]
2097        pub idx: i64,
2098        ///
2099        #[prost(int64, tag = "4")]
2100        pub vote_id: i64,
2101    }
2102    /// Nested message and enum types in `VoteOption`.
2103    pub mod vote_option {
2104        ///
2105        #[derive(
2106            Clone,
2107            Copy,
2108            Debug,
2109            PartialEq,
2110            Eq,
2111            Hash,
2112            PartialOrd,
2113            Ord,
2114            ::prost::Enumeration
2115        )]
2116        #[repr(i32)]
2117        pub enum LabelKind {
2118            ///
2119            DefaultLabelKind = 0,
2120            ///
2121            Red = 1,
2122            ///
2123            Blue = 2,
2124            ///
2125            Plain = 3,
2126        }
2127        impl LabelKind {
2128            /// String value of the enum field names used in the ProtoBuf definition.
2129            ///
2130            /// The values are not transformed in any way and thus are considered stable
2131            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2132            pub fn as_str_name(&self) -> &'static str {
2133                match self {
2134                    Self::DefaultLabelKind => "DEFAULT_LabelKind",
2135                    Self::Red => "RED",
2136                    Self::Blue => "BLUE",
2137                    Self::Plain => "PLAIN",
2138                }
2139            }
2140            /// Creates an enum from field names used in the ProtoBuf definition.
2141            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2142                match value {
2143                    "DEFAULT_LabelKind" => Some(Self::DefaultLabelKind),
2144                    "RED" => Some(Self::Red),
2145                    "BLUE" => Some(Self::Blue),
2146                    "PLAIN" => Some(Self::Plain),
2147                    _ => None,
2148                }
2149            }
2150        }
2151    }
2152}
2153///
2154#[derive(Clone, PartialEq, ::prost::Message)]
2155pub struct ReplyExtra {
2156    ///
2157    #[prost(int64, tag = "1")]
2158    pub season_id: i64,
2159    ///
2160    #[prost(int64, tag = "2")]
2161    pub season_type: i64,
2162    ///
2163    #[prost(int64, tag = "3")]
2164    pub ep_id: i64,
2165    ///
2166    #[prost(bool, tag = "4")]
2167    pub is_story: bool,
2168    ///
2169    #[prost(string, tag = "5")]
2170    pub spmid: ::prost::alloc::string::String,
2171    ///
2172    #[prost(string, tag = "6")]
2173    pub from_spmid: ::prost::alloc::string::String,
2174    ///
2175    #[prost(bool, tag = "7")]
2176    pub disable_underline: bool,
2177    ///
2178    #[prost(bool, tag = "8")]
2179    pub disable_we_search: bool,
2180    ///
2181    #[prost(bool, tag = "9")]
2182    pub disable_filter_tag: bool,
2183    ///
2184    #[prost(bool, tag = "10")]
2185    pub is_activity_mode: bool,
2186}
2187///
2188#[derive(Clone, PartialEq, ::prost::Message)]
2189pub struct ReplyInfo {
2190    ///
2191    #[prost(message, repeated, tag = "1")]
2192    pub replies: ::prost::alloc::vec::Vec<ReplyInfo>,
2193    ///
2194    #[prost(int64, tag = "2")]
2195    pub id: i64,
2196    ///
2197    #[prost(int64, tag = "3")]
2198    pub oid: i64,
2199    ///
2200    #[prost(int64, tag = "4")]
2201    pub r#type: i64,
2202    ///
2203    #[prost(int64, tag = "5")]
2204    pub mid: i64,
2205    ///
2206    #[prost(int64, tag = "6")]
2207    pub root: i64,
2208    ///
2209    #[prost(int64, tag = "7")]
2210    pub parent: i64,
2211    ///
2212    #[prost(int64, tag = "8")]
2213    pub dialog: i64,
2214    ///
2215    #[prost(int64, tag = "9")]
2216    pub like: i64,
2217    ///
2218    #[prost(int64, tag = "10")]
2219    pub ctime: i64,
2220    ///
2221    #[prost(int64, tag = "11")]
2222    pub count: i64,
2223    ///
2224    #[prost(message, optional, tag = "12")]
2225    pub content: ::core::option::Option<Content>,
2226    ///
2227    #[prost(message, optional, tag = "13")]
2228    pub member: ::core::option::Option<Member>,
2229    ///
2230    #[prost(message, optional, tag = "14")]
2231    pub reply_control: ::core::option::Option<ReplyControl>,
2232    ///
2233    #[prost(message, optional, tag = "15")]
2234    pub member_v2: ::core::option::Option<MemberV2>,
2235    ///
2236    #[prost(string, tag = "16")]
2237    pub track_info: ::prost::alloc::string::String,
2238}
2239///
2240#[derive(Clone, PartialEq, ::prost::Message)]
2241pub struct ReplyInfoReply {
2242    ///
2243    #[prost(message, optional, tag = "1")]
2244    pub reply: ::core::option::Option<ReplyInfo>,
2245}
2246///
2247#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2248pub struct ReplyInfoReq {
2249    ///
2250    #[prost(int64, tag = "1")]
2251    pub rpid: i64,
2252    ///
2253    #[prost(enumeration = "reply_info_req::ReplyInfoScene", tag = "2")]
2254    pub scene: i32,
2255}
2256/// Nested message and enum types in `ReplyInfoReq`.
2257pub mod reply_info_req {
2258    ///
2259    #[derive(
2260        Clone,
2261        Copy,
2262        Debug,
2263        PartialEq,
2264        Eq,
2265        Hash,
2266        PartialOrd,
2267        Ord,
2268        ::prost::Enumeration
2269    )]
2270    #[repr(i32)]
2271    pub enum ReplyInfoScene {
2272        ///
2273        Insert = 0,
2274    }
2275    impl ReplyInfoScene {
2276        /// String value of the enum field names used in the ProtoBuf definition.
2277        ///
2278        /// The values are not transformed in any way and thus are considered stable
2279        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2280        pub fn as_str_name(&self) -> &'static str {
2281            match self {
2282                Self::Insert => "Insert",
2283            }
2284        }
2285        /// Creates an enum from field names used in the ProtoBuf definition.
2286        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2287            match value {
2288                "Insert" => Some(Self::Insert),
2289                _ => None,
2290            }
2291        }
2292    }
2293}
2294///
2295#[derive(Clone, PartialEq, ::prost::Message)]
2296pub struct ReplyTrackInfo {
2297    ///
2298    #[prost(string, tag = "1")]
2299    pub track_id: ::prost::alloc::string::String,
2300}
2301///
2302#[derive(Clone, PartialEq, ::prost::Message)]
2303pub struct RichText {
2304    ///
2305    #[prost(oneof = "rich_text::Item", tags = "1, 2")]
2306    pub item: ::core::option::Option<rich_text::Item>,
2307}
2308/// Nested message and enum types in `RichText`.
2309pub mod rich_text {
2310    ///
2311    #[derive(Clone, PartialEq, ::prost::Oneof)]
2312    pub enum Item {
2313        ///
2314        #[prost(message, tag = "1")]
2315        Note(super::RichTextNote),
2316        ///
2317        #[prost(message, tag = "2")]
2318        Opus(super::super::super::super::super::app::dynamic::v2::OpusItem),
2319    }
2320}
2321///
2322#[derive(Clone, PartialEq, ::prost::Message)]
2323pub struct RichTextNote {
2324    ///
2325    #[prost(string, tag = "1")]
2326    pub summary: ::prost::alloc::string::String,
2327    ///
2328    #[prost(string, repeated, tag = "2")]
2329    pub images: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2330    ///
2331    #[prost(string, tag = "3")]
2332    pub click_url: ::prost::alloc::string::String,
2333    ///
2334    #[prost(string, tag = "4")]
2335    pub last_mtime_text: ::prost::alloc::string::String,
2336}
2337///
2338#[derive(Clone, PartialEq, ::prost::Message)]
2339pub struct SearchItem {
2340    ///
2341    #[prost(string, tag = "1")]
2342    pub url: ::prost::alloc::string::String,
2343    ///
2344    #[prost(oneof = "search_item::Item", tags = "2, 3, 4")]
2345    pub item: ::core::option::Option<search_item::Item>,
2346}
2347/// Nested message and enum types in `SearchItem`.
2348pub mod search_item {
2349    ///
2350    #[derive(Clone, PartialEq, ::prost::Oneof)]
2351    pub enum Item {
2352        ///
2353        #[prost(message, tag = "2")]
2354        Goods(super::GoodsSearchItem),
2355        ///
2356        #[prost(message, tag = "3")]
2357        Video(super::VideoSearchItem),
2358        ///
2359        #[prost(message, tag = "4")]
2360        Article(super::ArticleSearchItem),
2361    }
2362}
2363///
2364#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2365pub struct SearchItemCursorReply {
2366    ///
2367    #[prost(bool, tag = "1")]
2368    pub has_next: bool,
2369    ///
2370    #[prost(int64, tag = "2")]
2371    pub next: i64,
2372}
2373///
2374#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2375pub struct SearchItemCursorReq {
2376    ///
2377    #[prost(int64, tag = "1")]
2378    pub next: i64,
2379    ///
2380    #[prost(enumeration = "SearchItemType", tag = "2")]
2381    pub item_type: i32,
2382}
2383///
2384#[derive(Clone, PartialEq, ::prost::Message)]
2385pub struct SearchItemPreHookReply {
2386    ///
2387    #[prost(string, tag = "1")]
2388    pub placeholder_text: ::prost::alloc::string::String,
2389    ///
2390    #[prost(string, tag = "2")]
2391    pub background_text: ::prost::alloc::string::String,
2392    ///
2393    #[prost(int32, repeated, tag = "3")]
2394    pub ordered_type: ::prost::alloc::vec::Vec<i32>,
2395}
2396///
2397#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2398pub struct SearchItemPreHookReq {
2399    ///
2400    #[prost(int64, tag = "1")]
2401    pub oid: i64,
2402    ///
2403    #[prost(int64, tag = "2")]
2404    pub r#type: i64,
2405}
2406///
2407#[derive(Clone, PartialEq, ::prost::Message)]
2408pub struct SearchItemReply {
2409    ///
2410    #[prost(message, optional, tag = "1")]
2411    pub cursor: ::core::option::Option<SearchItemCursorReply>,
2412    ///
2413    #[prost(message, repeated, tag = "2")]
2414    pub items: ::prost::alloc::vec::Vec<SearchItem>,
2415    ///
2416    #[prost(message, optional, tag = "3")]
2417    pub extra: ::core::option::Option<SearchItemReplyExtraInfo>,
2418}
2419///
2420#[derive(Clone, PartialEq, ::prost::Message)]
2421pub struct SearchItemReplyExtraInfo {
2422    ///
2423    #[prost(string, tag = "1")]
2424    pub event_id: ::prost::alloc::string::String,
2425}
2426///
2427#[derive(Clone, PartialEq, ::prost::Message)]
2428pub struct SearchItemReq {
2429    ///
2430    #[prost(message, optional, tag = "1")]
2431    pub cursor: ::core::option::Option<SearchItemCursorReq>,
2432    ///
2433    #[prost(int64, tag = "2")]
2434    pub oid: i64,
2435    ///
2436    #[prost(int64, tag = "3")]
2437    pub r#type: i64,
2438    ///
2439    #[prost(string, tag = "4")]
2440    pub keyword: ::prost::alloc::string::String,
2441}
2442///
2443#[derive(Clone, PartialEq, ::prost::Message)]
2444pub struct ShareRepliesInfoReq {
2445    ///
2446    #[prost(int64, repeated, tag = "1")]
2447    pub rpids: ::prost::alloc::vec::Vec<i64>,
2448    ///
2449    #[prost(int64, tag = "2")]
2450    pub oid: i64,
2451    ///
2452    #[prost(int64, tag = "3")]
2453    pub r#type: i64,
2454}
2455///
2456#[derive(Clone, PartialEq, ::prost::Message)]
2457pub struct ShareRepliesInfoResp {
2458    ///
2459    #[prost(message, repeated, tag = "1")]
2460    pub infos: ::prost::alloc::vec::Vec<ShareReplyInfo>,
2461    ///
2462    #[prost(string, tag = "2")]
2463    pub from_title: ::prost::alloc::string::String,
2464    ///
2465    #[prost(string, tag = "3")]
2466    pub from_up: ::prost::alloc::string::String,
2467    ///
2468    #[prost(string, tag = "4")]
2469    pub from_pic: ::prost::alloc::string::String,
2470    ///
2471    #[prost(string, tag = "5")]
2472    pub url: ::prost::alloc::string::String,
2473    ///
2474    #[prost(string, tag = "6")]
2475    pub slogan_pic: ::prost::alloc::string::String,
2476    ///
2477    #[prost(string, tag = "7")]
2478    pub slogan_text: ::prost::alloc::string::String,
2479    ///
2480    #[prost(message, optional, tag = "8")]
2481    pub topic: ::core::option::Option<ShareReplyTopic>,
2482    ///
2483    #[prost(message, optional, tag = "9")]
2484    pub extra: ::core::option::Option<share_replies_info_resp::ShareExtra>,
2485}
2486/// Nested message and enum types in `ShareRepliesInfoResp`.
2487pub mod share_replies_info_resp {
2488    ///
2489    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
2490    pub struct ShareExtra {
2491        ///
2492        #[prost(bool, tag = "1")]
2493        pub is_pgc: bool,
2494    }
2495}
2496///
2497#[derive(Clone, PartialEq, ::prost::Message)]
2498pub struct ShareReplyInfo {
2499    ///
2500    #[prost(message, optional, tag = "1")]
2501    pub member: ::core::option::Option<Member>,
2502    ///
2503    #[prost(message, optional, tag = "2")]
2504    pub content: ::core::option::Option<Content>,
2505    ///
2506    #[prost(string, tag = "3")]
2507    pub title: ::prost::alloc::string::String,
2508    ///
2509    #[prost(string, tag = "4")]
2510    pub sub_title: ::prost::alloc::string::String,
2511    ///
2512    #[prost(string, tag = "5")]
2513    pub achievement_text: ::prost::alloc::string::String,
2514    ///
2515    #[prost(string, tag = "6")]
2516    pub label_url: ::prost::alloc::string::String,
2517}
2518///
2519#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2520pub struct ShareReplyMaterialReq {
2521    ///
2522    #[prost(int64, tag = "1")]
2523    pub oid: i64,
2524    ///
2525    #[prost(int64, tag = "2")]
2526    pub r#type: i64,
2527    ///
2528    #[prost(int64, tag = "3")]
2529    pub rpid: i64,
2530}
2531///
2532#[derive(Clone, PartialEq, ::prost::Message)]
2533pub struct ShareReplyMaterialResp {
2534    ///
2535    #[prost(message, optional, tag = "1")]
2536    pub subject_material: ::core::option::Option<
2537        share_reply_material_resp::SubjectMaterial,
2538    >,
2539    ///
2540    #[prost(string, tag = "2")]
2541    pub qrcode_url: ::prost::alloc::string::String,
2542    ///
2543    #[prost(string, tag = "3")]
2544    pub save_pic_text: ::prost::alloc::string::String,
2545    ///
2546    #[prost(string, tag = "4")]
2547    pub open_app_text: ::prost::alloc::string::String,
2548    ///
2549    #[prost(string, tag = "5")]
2550    pub share_time_text: ::prost::alloc::string::String,
2551    ///
2552    #[prost(string, tag = "6")]
2553    pub bili_logo_icon: ::prost::alloc::string::String,
2554    ///
2555    #[prost(message, optional, tag = "7")]
2556    pub extra: ::core::option::Option<share_reply_material_resp::ExtraData>,
2557}
2558/// Nested message and enum types in `ShareReplyMaterialResp`.
2559pub mod share_reply_material_resp {
2560    ///
2561    #[derive(Clone, PartialEq, ::prost::Message)]
2562    pub struct ArchiveMaterial {
2563        ///
2564        #[prost(string, tag = "1")]
2565        pub title: ::prost::alloc::string::String,
2566        ///
2567        #[prost(string, tag = "2")]
2568        pub cover: ::prost::alloc::string::String,
2569        ///
2570        #[prost(string, tag = "3")]
2571        pub up_name: ::prost::alloc::string::String,
2572        ///
2573        #[prost(string, tag = "4")]
2574        pub up_icon: ::prost::alloc::string::String,
2575    }
2576    ///
2577    #[derive(Clone, PartialEq, ::prost::Message)]
2578    pub struct ArticleMaterial {
2579        ///
2580        #[prost(string, tag = "1")]
2581        pub title: ::prost::alloc::string::String,
2582        ///
2583        #[prost(string, tag = "2")]
2584        pub message: ::prost::alloc::string::String,
2585    }
2586    ///
2587    #[derive(Clone, PartialEq, ::prost::Message)]
2588    pub struct DynamicMaterial {
2589        ///
2590        #[prost(string, tag = "1")]
2591        pub title: ::prost::alloc::string::String,
2592        ///
2593        #[prost(string, tag = "2")]
2594        pub message: ::prost::alloc::string::String,
2595    }
2596    ///
2597    #[derive(Clone, PartialEq, ::prost::Message)]
2598    pub struct ExtraData {
2599        ///
2600        #[prost(bool, tag = "1")]
2601        pub is_pgc: bool,
2602        ///
2603        #[prost(string, tag = "2")]
2604        pub origin_text: ::prost::alloc::string::String,
2605        ///
2606        #[prost(int64, tag = "3")]
2607        pub topic_id: i64,
2608    }
2609    ///
2610    #[derive(Clone, PartialEq, ::prost::Message)]
2611    pub struct SubjectMaterial {
2612        ///
2613        #[prost(oneof = "subject_material::Item", tags = "1, 2, 3")]
2614        pub item: ::core::option::Option<subject_material::Item>,
2615    }
2616    /// Nested message and enum types in `SubjectMaterial`.
2617    pub mod subject_material {
2618        ///
2619        #[derive(Clone, PartialEq, ::prost::Oneof)]
2620        pub enum Item {
2621            ///
2622            #[prost(message, tag = "1")]
2623            ArchiveMaterial(super::ArchiveMaterial),
2624            ///
2625            #[prost(message, tag = "2")]
2626            DynamicMaterial(super::DynamicMaterial),
2627            ///
2628            #[prost(message, tag = "3")]
2629            ArticleMaterial(super::ArticleMaterial),
2630        }
2631    }
2632}
2633///
2634#[derive(Clone, PartialEq, ::prost::Message)]
2635pub struct ShareReplyTopic {
2636    ///
2637    #[prost(message, optional, tag = "1")]
2638    pub topic: ::core::option::Option<Topic>,
2639    ///
2640    #[prost(string, tag = "2")]
2641    pub origin_text: ::prost::alloc::string::String,
2642}
2643///
2644#[derive(Clone, PartialEq, ::prost::Message)]
2645pub struct SubjectControl {
2646    ///
2647    #[prost(int64, tag = "1")]
2648    pub up_mid: i64,
2649    ///
2650    #[prost(bool, tag = "2")]
2651    pub is_assist: bool,
2652    ///
2653    #[prost(bool, tag = "3")]
2654    pub read_only: bool,
2655    ///
2656    #[prost(bool, tag = "4")]
2657    pub has_vote_access: bool,
2658    ///
2659    #[prost(bool, tag = "5")]
2660    pub has_lottery_access: bool,
2661    ///
2662    #[prost(bool, tag = "6")]
2663    pub has_folded_reply: bool,
2664    ///
2665    #[prost(string, tag = "7")]
2666    pub bg_text: ::prost::alloc::string::String,
2667    ///
2668    #[prost(bool, tag = "8")]
2669    pub up_blocked: bool,
2670    ///
2671    #[prost(bool, tag = "9")]
2672    pub has_activity_access: bool,
2673    ///
2674    #[prost(bool, tag = "10")]
2675    pub show_title: bool,
2676    ///
2677    #[prost(bool, tag = "11")]
2678    pub show_up_action: bool,
2679    ///
2680    #[prost(int64, tag = "12")]
2681    pub switcher_type: i64,
2682    ///
2683    #[prost(bool, tag = "13")]
2684    pub input_disable: bool,
2685    ///
2686    #[prost(string, tag = "14")]
2687    pub root_text: ::prost::alloc::string::String,
2688    ///
2689    #[prost(string, tag = "15")]
2690    pub child_text: ::prost::alloc::string::String,
2691    ///
2692    #[prost(int64, tag = "16")]
2693    pub count: i64,
2694    ///
2695    #[prost(string, tag = "17")]
2696    pub title: ::prost::alloc::string::String,
2697    ///
2698    #[prost(string, tag = "18")]
2699    pub giveup_text: ::prost::alloc::string::String,
2700    ///
2701    #[prost(bool, tag = "19")]
2702    pub has_note_access: bool,
2703    ///
2704    #[prost(bool, tag = "20")]
2705    pub disable_jump_emote: bool,
2706    ///
2707    #[prost(string, tag = "21")]
2708    pub empty_background_text_plain: ::prost::alloc::string::String,
2709    ///
2710    #[prost(string, tag = "22")]
2711    pub empty_background_text_highlight: ::prost::alloc::string::String,
2712    ///
2713    #[prost(string, tag = "23")]
2714    pub empty_background_uri: ::prost::alloc::string::String,
2715    ///
2716    #[prost(message, repeated, tag = "24")]
2717    pub support_filter_tags: ::prost::alloc::vec::Vec<subject_control::FilterTag>,
2718    ///
2719    #[prost(enumeration = "EditorIconState", tag = "25")]
2720    pub screenshot_icon_state: i32,
2721    ///
2722    #[prost(enumeration = "EditorIconState", tag = "26")]
2723    pub upload_picture_icon_state: i32,
2724    ///
2725    #[prost(message, optional, tag = "27")]
2726    pub empty_page: ::core::option::Option<EmptyPage>,
2727    ///
2728    #[prost(message, optional, tag = "28")]
2729    pub cm_top_reply_protection: ::core::option::Option<
2730        subject_control::CmTopReplyProtection,
2731    >,
2732    ///
2733    #[prost(bool, tag = "29")]
2734    pub enable_charged: bool,
2735}
2736/// Nested message and enum types in `SubjectControl`.
2737pub mod subject_control {
2738    ///
2739    #[derive(Clone, PartialEq, ::prost::Message)]
2740    pub struct CmTopReplyProtection {
2741        ///
2742        #[prost(int64, tag = "1")]
2743        pub protected_top_rpid: i64,
2744        ///
2745        #[prost(string, tag = "2")]
2746        pub popup_message: ::prost::alloc::string::String,
2747        ///
2748        #[prost(string, tag = "3")]
2749        pub appeal_url: ::prost::alloc::string::String,
2750    }
2751    ///
2752    #[derive(Clone, PartialEq, ::prost::Message)]
2753    pub struct FilterTag {
2754        ///
2755        #[prost(string, tag = "1")]
2756        pub name: ::prost::alloc::string::String,
2757        ///
2758        #[prost(string, tag = "2")]
2759        pub event_id: ::prost::alloc::string::String,
2760    }
2761}
2762///
2763#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2764pub struct SuggestEmotesReq {
2765    ///
2766    #[prost(int64, tag = "1")]
2767    pub oid: i64,
2768    ///
2769    #[prost(int64, tag = "2")]
2770    pub r#type: i64,
2771}
2772///
2773#[derive(Clone, PartialEq, ::prost::Message)]
2774pub struct SuggestEmotesResp {
2775    ///
2776    #[prost(message, repeated, tag = "1")]
2777    pub emotes: ::prost::alloc::vec::Vec<Emote>,
2778}
2779///
2780#[derive(Clone, PartialEq, ::prost::Message)]
2781pub struct TextStyle {
2782    ///
2783    #[prost(int32, tag = "1")]
2784    pub font_size: i32,
2785    ///
2786    #[prost(enumeration = "text_style::FontStyle", tag = "2")]
2787    pub font_style: i32,
2788    ///
2789    #[prost(string, tag = "3")]
2790    pub text_day_color: ::prost::alloc::string::String,
2791    ///
2792    #[prost(string, tag = "4")]
2793    pub text_night_color: ::prost::alloc::string::String,
2794}
2795/// Nested message and enum types in `TextStyle`.
2796pub mod text_style {
2797    ///
2798    #[derive(
2799        Clone,
2800        Copy,
2801        Debug,
2802        PartialEq,
2803        Eq,
2804        Hash,
2805        PartialOrd,
2806        Ord,
2807        ::prost::Enumeration
2808    )]
2809    #[repr(i32)]
2810    pub enum FontStyle {
2811        ///
2812        Normal = 0,
2813        ///
2814        Bold = 1,
2815    }
2816    impl FontStyle {
2817        /// String value of the enum field names used in the ProtoBuf definition.
2818        ///
2819        /// The values are not transformed in any way and thus are considered stable
2820        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2821        pub fn as_str_name(&self) -> &'static str {
2822            match self {
2823                Self::Normal => "NORMAL",
2824                Self::Bold => "BOLD",
2825            }
2826        }
2827        /// Creates an enum from field names used in the ProtoBuf definition.
2828        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2829            match value {
2830                "NORMAL" => Some(Self::Normal),
2831                "BOLD" => Some(Self::Bold),
2832                _ => None,
2833            }
2834        }
2835    }
2836}
2837///
2838#[derive(Clone, PartialEq, ::prost::Message)]
2839pub struct Topic {
2840    ///
2841    #[prost(string, tag = "1")]
2842    pub link: ::prost::alloc::string::String,
2843    ///
2844    #[prost(int64, tag = "2")]
2845    pub id: i64,
2846}
2847///
2848#[derive(Clone, PartialEq, ::prost::Message)]
2849pub struct UgcVideoSearchItem {
2850    ///
2851    #[prost(string, tag = "1")]
2852    pub title: ::prost::alloc::string::String,
2853    ///
2854    #[prost(string, tag = "2")]
2855    pub up_nickname: ::prost::alloc::string::String,
2856    ///
2857    #[prost(int64, tag = "3")]
2858    pub duration: i64,
2859    ///
2860    #[prost(string, tag = "4")]
2861    pub cover: ::prost::alloc::string::String,
2862}
2863///
2864#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2865pub struct UpSelection {
2866    ///
2867    #[prost(int64, tag = "1")]
2868    pub pending_count: i64,
2869    ///
2870    #[prost(int64, tag = "2")]
2871    pub ignore_count: i64,
2872}
2873///
2874#[derive(Clone, PartialEq, ::prost::Message)]
2875pub struct Url {
2876    ///
2877    #[prost(string, tag = "1")]
2878    pub title: ::prost::alloc::string::String,
2879    ///
2880    #[prost(int64, tag = "2")]
2881    pub state: i64,
2882    ///
2883    #[prost(string, tag = "3")]
2884    pub prefix_icon: ::prost::alloc::string::String,
2885    ///
2886    #[prost(string, tag = "4")]
2887    pub app_url_schema: ::prost::alloc::string::String,
2888    ///
2889    #[prost(string, tag = "5")]
2890    pub app_name: ::prost::alloc::string::String,
2891    ///
2892    #[prost(string, tag = "6")]
2893    pub app_package_name: ::prost::alloc::string::String,
2894    ///
2895    #[prost(string, tag = "7")]
2896    pub click_report: ::prost::alloc::string::String,
2897    ///
2898    #[prost(bool, tag = "8")]
2899    pub is_half_screen: bool,
2900    ///
2901    #[prost(string, tag = "9")]
2902    pub exposure_report: ::prost::alloc::string::String,
2903    ///
2904    #[prost(message, optional, tag = "10")]
2905    pub extra: ::core::option::Option<url::Extra>,
2906    ///
2907    #[prost(bool, tag = "11")]
2908    pub underline: bool,
2909    ///
2910    #[prost(bool, tag = "12")]
2911    pub match_once: bool,
2912    ///
2913    #[prost(string, tag = "13")]
2914    pub pc_url: ::prost::alloc::string::String,
2915    ///
2916    #[prost(enumeration = "url::IconPosition", tag = "14")]
2917    pub icon_position: i32,
2918}
2919/// Nested message and enum types in `Url`.
2920pub mod url {
2921    ///
2922    #[derive(Clone, PartialEq, ::prost::Message)]
2923    pub struct Extra {
2924        ///
2925        #[prost(int64, tag = "1")]
2926        pub goods_item_id: i64,
2927        ///
2928        #[prost(string, tag = "2")]
2929        pub goods_prefetched_cache: ::prost::alloc::string::String,
2930        ///
2931        #[prost(enumeration = "extra::GoodsShowType", tag = "3")]
2932        pub goods_show_type: i32,
2933        ///
2934        #[prost(bool, tag = "4")]
2935        pub is_word_search: bool,
2936        ///
2937        #[prost(int64, tag = "5")]
2938        pub goods_cm_control: i64,
2939        ///
2940        #[prost(string, tag = "6")]
2941        pub goods_click_report: ::prost::alloc::string::String,
2942        ///
2943        #[prost(string, tag = "7")]
2944        pub goods_exposure_report: ::prost::alloc::string::String,
2945        ///
2946        #[prost(int64, tag = "8")]
2947        pub goods_show_pop_window: i64,
2948    }
2949    /// Nested message and enum types in `Extra`.
2950    pub mod extra {
2951        ///
2952        #[derive(
2953            Clone,
2954            Copy,
2955            Debug,
2956            PartialEq,
2957            Eq,
2958            Hash,
2959            PartialOrd,
2960            Ord,
2961            ::prost::Enumeration
2962        )]
2963        #[repr(i32)]
2964        pub enum GoodsShowType {
2965            ///
2966            Popup = 0,
2967            ///
2968            FullScreen = 1,
2969            ///
2970            HalfScreen = 2,
2971        }
2972        impl GoodsShowType {
2973            /// String value of the enum field names used in the ProtoBuf definition.
2974            ///
2975            /// The values are not transformed in any way and thus are considered stable
2976            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2977            pub fn as_str_name(&self) -> &'static str {
2978                match self {
2979                    Self::Popup => "Popup",
2980                    Self::FullScreen => "FullScreen",
2981                    Self::HalfScreen => "HalfScreen",
2982                }
2983            }
2984            /// Creates an enum from field names used in the ProtoBuf definition.
2985            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2986                match value {
2987                    "Popup" => Some(Self::Popup),
2988                    "FullScreen" => Some(Self::FullScreen),
2989                    "HalfScreen" => Some(Self::HalfScreen),
2990                    _ => None,
2991                }
2992            }
2993        }
2994    }
2995    ///
2996    #[derive(
2997        Clone,
2998        Copy,
2999        Debug,
3000        PartialEq,
3001        Eq,
3002        Hash,
3003        PartialOrd,
3004        Ord,
3005        ::prost::Enumeration
3006    )]
3007    #[repr(i32)]
3008    pub enum IconPosition {
3009        ///
3010        Prefix = 0,
3011        ///
3012        Suffix = 1,
3013    }
3014    impl IconPosition {
3015        /// String value of the enum field names used in the ProtoBuf definition.
3016        ///
3017        /// The values are not transformed in any way and thus are considered stable
3018        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3019        pub fn as_str_name(&self) -> &'static str {
3020            match self {
3021                Self::Prefix => "Prefix",
3022                Self::Suffix => "Suffix",
3023            }
3024        }
3025        /// Creates an enum from field names used in the ProtoBuf definition.
3026        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3027            match value {
3028                "Prefix" => Some(Self::Prefix),
3029                "Suffix" => Some(Self::Suffix),
3030                _ => None,
3031            }
3032        }
3033    }
3034}
3035///
3036#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3037pub struct UserCallbackReply {}
3038///
3039#[derive(Clone, PartialEq, ::prost::Message)]
3040pub struct UserCallbackReq {
3041    ///
3042    #[prost(int64, tag = "1")]
3043    pub mid: i64,
3044    ///
3045    #[prost(enumeration = "UserCallbackScene", tag = "2")]
3046    pub scene: i32,
3047    ///
3048    #[prost(enumeration = "UserCallbackAction", tag = "3")]
3049    pub action: i32,
3050    ///
3051    #[prost(int64, tag = "4")]
3052    pub oid: i64,
3053    ///
3054    #[prost(int64, tag = "5")]
3055    pub r#type: i64,
3056    ///
3057    #[prost(int64, repeated, tag = "6")]
3058    pub rpids: ::prost::alloc::vec::Vec<i64>,
3059}
3060///
3061#[derive(Clone, PartialEq, ::prost::Message)]
3062pub struct VideoSearchItem {
3063    ///
3064    #[prost(enumeration = "SearchItemVideoSubType", tag = "1")]
3065    pub r#type: i32,
3066    ///
3067    #[prost(oneof = "video_search_item::VideoItem", tags = "2, 3")]
3068    pub video_item: ::core::option::Option<video_search_item::VideoItem>,
3069}
3070/// Nested message and enum types in `VideoSearchItem`.
3071pub mod video_search_item {
3072    ///
3073    #[derive(Clone, PartialEq, ::prost::Oneof)]
3074    pub enum VideoItem {
3075        ///
3076        #[prost(message, tag = "2")]
3077        Ugc(super::UgcVideoSearchItem),
3078        ///
3079        #[prost(message, tag = "3")]
3080        Pgc(super::PgcVideoSearchItem),
3081    }
3082}
3083///
3084#[derive(Clone, PartialEq, ::prost::Message)]
3085pub struct Vote {
3086    ///
3087    #[prost(int64, tag = "1")]
3088    pub id: i64,
3089    ///
3090    #[prost(string, tag = "2")]
3091    pub title: ::prost::alloc::string::String,
3092    ///
3093    #[prost(int64, tag = "3")]
3094    pub count: i64,
3095}
3096///
3097#[derive(Clone, PartialEq, ::prost::Message)]
3098pub struct VoteCard {
3099    ///
3100    #[prost(int64, tag = "1")]
3101    pub vote_id: i64,
3102    ///
3103    #[prost(string, tag = "2")]
3104    pub title: ::prost::alloc::string::String,
3105    ///
3106    #[prost(int64, tag = "3")]
3107    pub count: i64,
3108    ///
3109    #[prost(message, repeated, tag = "4")]
3110    pub options: ::prost::alloc::vec::Vec<vote_card::Option>,
3111    ///
3112    #[prost(int64, tag = "5")]
3113    pub my_vote_option: i64,
3114}
3115/// Nested message and enum types in `VoteCard`.
3116pub mod vote_card {
3117    ///
3118    #[derive(Clone, PartialEq, ::prost::Message)]
3119    pub struct Option {
3120        ///
3121        #[prost(int64, tag = "1")]
3122        pub idx: i64,
3123        ///
3124        #[prost(string, tag = "2")]
3125        pub desc: ::prost::alloc::string::String,
3126        ///
3127        #[prost(int64, tag = "3")]
3128        pub count: i64,
3129    }
3130}
3131///
3132#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3133pub struct WordSearchParam {
3134    ///
3135    #[prost(int64, tag = "1")]
3136    pub shown_count: i64,
3137}
3138///
3139#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3140#[repr(i32)]
3141pub enum DetailListScene {
3142    ///
3143    Reply = 0,
3144    ///
3145    MsgFeed = 1,
3146    ///
3147    Notify = 2,
3148}
3149impl DetailListScene {
3150    /// String value of the enum field names used in the ProtoBuf definition.
3151    ///
3152    /// The values are not transformed in any way and thus are considered stable
3153    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3154    pub fn as_str_name(&self) -> &'static str {
3155        match self {
3156            Self::Reply => "REPLY",
3157            Self::MsgFeed => "MSG_FEED",
3158            Self::Notify => "NOTIFY",
3159        }
3160    }
3161    /// Creates an enum from field names used in the ProtoBuf definition.
3162    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3163        match value {
3164            "REPLY" => Some(Self::Reply),
3165            "MSG_FEED" => Some(Self::MsgFeed),
3166            "NOTIFY" => Some(Self::Notify),
3167            _ => None,
3168        }
3169    }
3170}
3171///
3172#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3173#[repr(i32)]
3174pub enum EditorIconState {
3175    ///
3176    Default = 0,
3177    ///
3178    Enable = 1,
3179    ///
3180    Disable = 2,
3181    ///
3182    Hide = 3,
3183}
3184impl EditorIconState {
3185    /// String value of the enum field names used in the ProtoBuf definition.
3186    ///
3187    /// The values are not transformed in any way and thus are considered stable
3188    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3189    pub fn as_str_name(&self) -> &'static str {
3190        match self {
3191            Self::Default => "EditorIconState_DEFAULT",
3192            Self::Enable => "EditorIconState_ENABLE",
3193            Self::Disable => "EditorIconState_DISABLE",
3194            Self::Hide => "EditorIconState_HIDE",
3195        }
3196    }
3197    /// Creates an enum from field names used in the ProtoBuf definition.
3198    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3199        match value {
3200            "EditorIconState_DEFAULT" => Some(Self::Default),
3201            "EditorIconState_ENABLE" => Some(Self::Enable),
3202            "EditorIconState_DISABLE" => Some(Self::Disable),
3203            "EditorIconState_HIDE" => Some(Self::Hide),
3204            _ => None,
3205        }
3206    }
3207}
3208///
3209#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3210#[repr(i32)]
3211pub enum Mode {
3212    ///
3213    DefaultMode = 0,
3214    /// @Deprecated
3215    Unspecified = 1,
3216    ///
3217    MainListTime = 2,
3218    ///
3219    MainListHot = 3,
3220}
3221impl Mode {
3222    /// String value of the enum field names used in the ProtoBuf definition.
3223    ///
3224    /// The values are not transformed in any way and thus are considered stable
3225    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3226    pub fn as_str_name(&self) -> &'static str {
3227        match self {
3228            Self::DefaultMode => "DEFAULT_Mode",
3229            Self::Unspecified => "UNSPECIFIED",
3230            Self::MainListTime => "MAIN_LIST_TIME",
3231            Self::MainListHot => "MAIN_LIST_HOT",
3232        }
3233    }
3234    /// Creates an enum from field names used in the ProtoBuf definition.
3235    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3236        match value {
3237            "DEFAULT_Mode" => Some(Self::DefaultMode),
3238            "UNSPECIFIED" => Some(Self::Unspecified),
3239            "MAIN_LIST_TIME" => Some(Self::MainListTime),
3240            "MAIN_LIST_HOT" => Some(Self::MainListHot),
3241            _ => None,
3242        }
3243    }
3244}
3245///
3246#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3247#[repr(i32)]
3248pub enum SearchItemType {
3249    ///
3250    DefaultItemType = 0,
3251    ///
3252    Goods = 1,
3253    ///
3254    Video = 2,
3255    ///
3256    Article = 3,
3257}
3258impl SearchItemType {
3259    /// String value of the enum field names used in the ProtoBuf definition.
3260    ///
3261    /// The values are not transformed in any way and thus are considered stable
3262    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3263    pub fn as_str_name(&self) -> &'static str {
3264        match self {
3265            Self::DefaultItemType => "DEFAULT_ITEM_TYPE",
3266            Self::Goods => "GOODS",
3267            Self::Video => "VIDEO",
3268            Self::Article => "ARTICLE",
3269        }
3270    }
3271    /// Creates an enum from field names used in the ProtoBuf definition.
3272    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3273        match value {
3274            "DEFAULT_ITEM_TYPE" => Some(Self::DefaultItemType),
3275            "GOODS" => Some(Self::Goods),
3276            "VIDEO" => Some(Self::Video),
3277            "ARTICLE" => Some(Self::Article),
3278            _ => None,
3279        }
3280    }
3281}
3282///
3283#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3284#[repr(i32)]
3285pub enum SearchItemVideoSubType {
3286    ///
3287    Ugc = 0,
3288    ///
3289    Pgc = 1,
3290}
3291impl SearchItemVideoSubType {
3292    /// String value of the enum field names used in the ProtoBuf definition.
3293    ///
3294    /// The values are not transformed in any way and thus are considered stable
3295    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3296    pub fn as_str_name(&self) -> &'static str {
3297        match self {
3298            Self::Ugc => "UGC",
3299            Self::Pgc => "PGC",
3300        }
3301    }
3302    /// Creates an enum from field names used in the ProtoBuf definition.
3303    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3304        match value {
3305            "UGC" => Some(Self::Ugc),
3306            "PGC" => Some(Self::Pgc),
3307            _ => None,
3308        }
3309    }
3310}
3311///
3312#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3313#[repr(i32)]
3314pub enum UserCallbackAction {
3315    ///
3316    Dismiss = 0,
3317}
3318impl UserCallbackAction {
3319    /// String value of the enum field names used in the ProtoBuf definition.
3320    ///
3321    /// The values are not transformed in any way and thus are considered stable
3322    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3323    pub fn as_str_name(&self) -> &'static str {
3324        match self {
3325            Self::Dismiss => "Dismiss",
3326        }
3327    }
3328    /// Creates an enum from field names used in the ProtoBuf definition.
3329    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3330        match value {
3331            "Dismiss" => Some(Self::Dismiss),
3332            _ => None,
3333        }
3334    }
3335}
3336///
3337#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3338#[repr(i32)]
3339pub enum UserCallbackScene {
3340    ///
3341    InsertUserCallbackScene = 0,
3342    ///
3343    RecommendSuperbReply = 1,
3344}
3345impl UserCallbackScene {
3346    /// String value of the enum field names used in the ProtoBuf definition.
3347    ///
3348    /// The values are not transformed in any way and thus are considered stable
3349    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3350    pub fn as_str_name(&self) -> &'static str {
3351        match self {
3352            Self::InsertUserCallbackScene => "Insert_UserCallbackScene",
3353            Self::RecommendSuperbReply => "RecommendSuperbReply",
3354        }
3355    }
3356    /// Creates an enum from field names used in the ProtoBuf definition.
3357    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3358        match value {
3359            "Insert_UserCallbackScene" => Some(Self::InsertUserCallbackScene),
3360            "RecommendSuperbReply" => Some(Self::RecommendSuperbReply),
3361            _ => None,
3362        }
3363    }
3364}
3365/// Generated client implementations.
3366pub mod reply_client {
3367    #![allow(
3368        unused_variables,
3369        dead_code,
3370        missing_docs,
3371        clippy::wildcard_imports,
3372        clippy::let_unit_value,
3373    )]
3374    use tonic::codegen::*;
3375    use tonic::codegen::http::Uri;
3376    ///
3377    #[derive(Debug, Clone)]
3378    pub struct ReplyClient<T> {
3379        inner: tonic::client::Grpc<T>,
3380    }
3381    impl<T> ReplyClient<T>
3382    where
3383        T: tonic::client::GrpcService<tonic::body::BoxBody>,
3384        T::Error: Into<StdError>,
3385        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
3386        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
3387    {
3388        pub fn new(inner: T) -> Self {
3389            let inner = tonic::client::Grpc::new(inner);
3390            Self { inner }
3391        }
3392        pub fn with_origin(inner: T, origin: Uri) -> Self {
3393            let inner = tonic::client::Grpc::with_origin(inner, origin);
3394            Self { inner }
3395        }
3396        pub fn with_interceptor<F>(
3397            inner: T,
3398            interceptor: F,
3399        ) -> ReplyClient<InterceptedService<T, F>>
3400        where
3401            F: tonic::service::Interceptor,
3402            T::ResponseBody: Default,
3403            T: tonic::codegen::Service<
3404                http::Request<tonic::body::BoxBody>,
3405                Response = http::Response<
3406                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
3407                >,
3408            >,
3409            <T as tonic::codegen::Service<
3410                http::Request<tonic::body::BoxBody>,
3411            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
3412        {
3413            ReplyClient::new(InterceptedService::new(inner, interceptor))
3414        }
3415        /// Compress requests with the given encoding.
3416        ///
3417        /// This requires the server to support it otherwise it might respond with an
3418        /// error.
3419        #[must_use]
3420        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
3421            self.inner = self.inner.send_compressed(encoding);
3422            self
3423        }
3424        /// Enable decompressing responses.
3425        #[must_use]
3426        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
3427            self.inner = self.inner.accept_compressed(encoding);
3428            self
3429        }
3430        /// Limits the maximum size of a decoded message.
3431        ///
3432        /// Default: `4MB`
3433        #[must_use]
3434        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
3435            self.inner = self.inner.max_decoding_message_size(limit);
3436            self
3437        }
3438        /// Limits the maximum size of an encoded message.
3439        ///
3440        /// Default: `usize::MAX`
3441        #[must_use]
3442        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
3443            self.inner = self.inner.max_encoding_message_size(limit);
3444            self
3445        }
3446        ///
3447        pub async fn answer_question(
3448            &mut self,
3449            request: impl tonic::IntoRequest<super::AnswerQuestionReq>,
3450        ) -> std::result::Result<
3451            tonic::Response<super::AnswerQuestionResp>,
3452            tonic::Status,
3453        > {
3454            self.inner
3455                .ready()
3456                .await
3457                .map_err(|e| {
3458                    tonic::Status::unknown(
3459                        format!("Service was not ready: {}", e.into()),
3460                    )
3461                })?;
3462            let codec = tonic::codec::ProstCodec::default();
3463            let path = http::uri::PathAndQuery::from_static(
3464                "/bilibili.main.community.reply.v1.Reply/AnswerQuestion",
3465            );
3466            let mut req = request.into_request();
3467            req.extensions_mut()
3468                .insert(
3469                    GrpcMethod::new(
3470                        "bilibili.main.community.reply.v1.Reply",
3471                        "AnswerQuestion",
3472                    ),
3473                );
3474            self.inner.unary(req, path, codec).await
3475        }
3476        ///
3477        pub async fn at_search(
3478            &mut self,
3479            request: impl tonic::IntoRequest<super::AtSearchReq>,
3480        ) -> std::result::Result<tonic::Response<super::AtSearchReply>, tonic::Status> {
3481            self.inner
3482                .ready()
3483                .await
3484                .map_err(|e| {
3485                    tonic::Status::unknown(
3486                        format!("Service was not ready: {}", e.into()),
3487                    )
3488                })?;
3489            let codec = tonic::codec::ProstCodec::default();
3490            let path = http::uri::PathAndQuery::from_static(
3491                "/bilibili.main.community.reply.v1.Reply/AtSearch",
3492            );
3493            let mut req = request.into_request();
3494            req.extensions_mut()
3495                .insert(
3496                    GrpcMethod::new("bilibili.main.community.reply.v1.Reply", "AtSearch"),
3497                );
3498            self.inner.unary(req, path, codec).await
3499        }
3500        ///
3501        pub async fn detail_list(
3502            &mut self,
3503            request: impl tonic::IntoRequest<super::DetailListReq>,
3504        ) -> std::result::Result<
3505            tonic::Response<super::DetailListReply>,
3506            tonic::Status,
3507        > {
3508            self.inner
3509                .ready()
3510                .await
3511                .map_err(|e| {
3512                    tonic::Status::unknown(
3513                        format!("Service was not ready: {}", e.into()),
3514                    )
3515                })?;
3516            let codec = tonic::codec::ProstCodec::default();
3517            let path = http::uri::PathAndQuery::from_static(
3518                "/bilibili.main.community.reply.v1.Reply/DetailList",
3519            );
3520            let mut req = request.into_request();
3521            req.extensions_mut()
3522                .insert(
3523                    GrpcMethod::new(
3524                        "bilibili.main.community.reply.v1.Reply",
3525                        "DetailList",
3526                    ),
3527                );
3528            self.inner.unary(req, path, codec).await
3529        }
3530        ///
3531        pub async fn dialog_list(
3532            &mut self,
3533            request: impl tonic::IntoRequest<super::DialogListReq>,
3534        ) -> std::result::Result<
3535            tonic::Response<super::DialogListReply>,
3536            tonic::Status,
3537        > {
3538            self.inner
3539                .ready()
3540                .await
3541                .map_err(|e| {
3542                    tonic::Status::unknown(
3543                        format!("Service was not ready: {}", e.into()),
3544                    )
3545                })?;
3546            let codec = tonic::codec::ProstCodec::default();
3547            let path = http::uri::PathAndQuery::from_static(
3548                "/bilibili.main.community.reply.v1.Reply/DialogList",
3549            );
3550            let mut req = request.into_request();
3551            req.extensions_mut()
3552                .insert(
3553                    GrpcMethod::new(
3554                        "bilibili.main.community.reply.v1.Reply",
3555                        "DialogList",
3556                    ),
3557                );
3558            self.inner.unary(req, path, codec).await
3559        }
3560        ///
3561        pub async fn do_vote(
3562            &mut self,
3563            request: impl tonic::IntoRequest<super::DoVoteReq>,
3564        ) -> std::result::Result<tonic::Response<super::DoVoteResp>, tonic::Status> {
3565            self.inner
3566                .ready()
3567                .await
3568                .map_err(|e| {
3569                    tonic::Status::unknown(
3570                        format!("Service was not ready: {}", e.into()),
3571                    )
3572                })?;
3573            let codec = tonic::codec::ProstCodec::default();
3574            let path = http::uri::PathAndQuery::from_static(
3575                "/bilibili.main.community.reply.v1.Reply/DoVote",
3576            );
3577            let mut req = request.into_request();
3578            req.extensions_mut()
3579                .insert(
3580                    GrpcMethod::new("bilibili.main.community.reply.v1.Reply", "DoVote"),
3581                );
3582            self.inner.unary(req, path, codec).await
3583        }
3584        ///
3585        pub async fn main_list(
3586            &mut self,
3587            request: impl tonic::IntoRequest<super::MainListReq>,
3588        ) -> std::result::Result<tonic::Response<super::MainListReply>, tonic::Status> {
3589            self.inner
3590                .ready()
3591                .await
3592                .map_err(|e| {
3593                    tonic::Status::unknown(
3594                        format!("Service was not ready: {}", e.into()),
3595                    )
3596                })?;
3597            let codec = tonic::codec::ProstCodec::default();
3598            let path = http::uri::PathAndQuery::from_static(
3599                "/bilibili.main.community.reply.v1.Reply/MainList",
3600            );
3601            let mut req = request.into_request();
3602            req.extensions_mut()
3603                .insert(
3604                    GrpcMethod::new("bilibili.main.community.reply.v1.Reply", "MainList"),
3605                );
3606            self.inner.unary(req, path, codec).await
3607        }
3608        ///
3609        pub async fn preview_list(
3610            &mut self,
3611            request: impl tonic::IntoRequest<super::PreviewListReq>,
3612        ) -> std::result::Result<
3613            tonic::Response<super::PreviewListReply>,
3614            tonic::Status,
3615        > {
3616            self.inner
3617                .ready()
3618                .await
3619                .map_err(|e| {
3620                    tonic::Status::unknown(
3621                        format!("Service was not ready: {}", e.into()),
3622                    )
3623                })?;
3624            let codec = tonic::codec::ProstCodec::default();
3625            let path = http::uri::PathAndQuery::from_static(
3626                "/bilibili.main.community.reply.v1.Reply/PreviewList",
3627            );
3628            let mut req = request.into_request();
3629            req.extensions_mut()
3630                .insert(
3631                    GrpcMethod::new(
3632                        "bilibili.main.community.reply.v1.Reply",
3633                        "PreviewList",
3634                    ),
3635                );
3636            self.inner.unary(req, path, codec).await
3637        }
3638        ///
3639        pub async fn reply_info(
3640            &mut self,
3641            request: impl tonic::IntoRequest<super::ReplyInfoReq>,
3642        ) -> std::result::Result<tonic::Response<super::ReplyInfoReply>, tonic::Status> {
3643            self.inner
3644                .ready()
3645                .await
3646                .map_err(|e| {
3647                    tonic::Status::unknown(
3648                        format!("Service was not ready: {}", e.into()),
3649                    )
3650                })?;
3651            let codec = tonic::codec::ProstCodec::default();
3652            let path = http::uri::PathAndQuery::from_static(
3653                "/bilibili.main.community.reply.v1.Reply/ReplyInfo",
3654            );
3655            let mut req = request.into_request();
3656            req.extensions_mut()
3657                .insert(
3658                    GrpcMethod::new(
3659                        "bilibili.main.community.reply.v1.Reply",
3660                        "ReplyInfo",
3661                    ),
3662                );
3663            self.inner.unary(req, path, codec).await
3664        }
3665        ///
3666        pub async fn search_item(
3667            &mut self,
3668            request: impl tonic::IntoRequest<super::SearchItemReq>,
3669        ) -> std::result::Result<
3670            tonic::Response<super::SearchItemReply>,
3671            tonic::Status,
3672        > {
3673            self.inner
3674                .ready()
3675                .await
3676                .map_err(|e| {
3677                    tonic::Status::unknown(
3678                        format!("Service was not ready: {}", e.into()),
3679                    )
3680                })?;
3681            let codec = tonic::codec::ProstCodec::default();
3682            let path = http::uri::PathAndQuery::from_static(
3683                "/bilibili.main.community.reply.v1.Reply/SearchItem",
3684            );
3685            let mut req = request.into_request();
3686            req.extensions_mut()
3687                .insert(
3688                    GrpcMethod::new(
3689                        "bilibili.main.community.reply.v1.Reply",
3690                        "SearchItem",
3691                    ),
3692                );
3693            self.inner.unary(req, path, codec).await
3694        }
3695        ///
3696        pub async fn search_item_pre_hook(
3697            &mut self,
3698            request: impl tonic::IntoRequest<super::SearchItemPreHookReq>,
3699        ) -> std::result::Result<
3700            tonic::Response<super::SearchItemPreHookReply>,
3701            tonic::Status,
3702        > {
3703            self.inner
3704                .ready()
3705                .await
3706                .map_err(|e| {
3707                    tonic::Status::unknown(
3708                        format!("Service was not ready: {}", e.into()),
3709                    )
3710                })?;
3711            let codec = tonic::codec::ProstCodec::default();
3712            let path = http::uri::PathAndQuery::from_static(
3713                "/bilibili.main.community.reply.v1.Reply/SearchItemPreHook",
3714            );
3715            let mut req = request.into_request();
3716            req.extensions_mut()
3717                .insert(
3718                    GrpcMethod::new(
3719                        "bilibili.main.community.reply.v1.Reply",
3720                        "SearchItemPreHook",
3721                    ),
3722                );
3723            self.inner.unary(req, path, codec).await
3724        }
3725        ///
3726        pub async fn share_replies_info(
3727            &mut self,
3728            request: impl tonic::IntoRequest<super::ShareRepliesInfoReq>,
3729        ) -> std::result::Result<
3730            tonic::Response<super::ShareRepliesInfoResp>,
3731            tonic::Status,
3732        > {
3733            self.inner
3734                .ready()
3735                .await
3736                .map_err(|e| {
3737                    tonic::Status::unknown(
3738                        format!("Service was not ready: {}", e.into()),
3739                    )
3740                })?;
3741            let codec = tonic::codec::ProstCodec::default();
3742            let path = http::uri::PathAndQuery::from_static(
3743                "/bilibili.main.community.reply.v1.Reply/ShareRepliesInfo",
3744            );
3745            let mut req = request.into_request();
3746            req.extensions_mut()
3747                .insert(
3748                    GrpcMethod::new(
3749                        "bilibili.main.community.reply.v1.Reply",
3750                        "ShareRepliesInfo",
3751                    ),
3752                );
3753            self.inner.unary(req, path, codec).await
3754        }
3755        ///
3756        pub async fn share_reply_material(
3757            &mut self,
3758            request: impl tonic::IntoRequest<super::ShareReplyMaterialReq>,
3759        ) -> std::result::Result<
3760            tonic::Response<super::ShareReplyMaterialResp>,
3761            tonic::Status,
3762        > {
3763            self.inner
3764                .ready()
3765                .await
3766                .map_err(|e| {
3767                    tonic::Status::unknown(
3768                        format!("Service was not ready: {}", e.into()),
3769                    )
3770                })?;
3771            let codec = tonic::codec::ProstCodec::default();
3772            let path = http::uri::PathAndQuery::from_static(
3773                "/bilibili.main.community.reply.v1.Reply/ShareReplyMaterial",
3774            );
3775            let mut req = request.into_request();
3776            req.extensions_mut()
3777                .insert(
3778                    GrpcMethod::new(
3779                        "bilibili.main.community.reply.v1.Reply",
3780                        "ShareReplyMaterial",
3781                    ),
3782                );
3783            self.inner.unary(req, path, codec).await
3784        }
3785        ///
3786        pub async fn suggest_emotes(
3787            &mut self,
3788            request: impl tonic::IntoRequest<super::SuggestEmotesReq>,
3789        ) -> std::result::Result<
3790            tonic::Response<super::SuggestEmotesResp>,
3791            tonic::Status,
3792        > {
3793            self.inner
3794                .ready()
3795                .await
3796                .map_err(|e| {
3797                    tonic::Status::unknown(
3798                        format!("Service was not ready: {}", e.into()),
3799                    )
3800                })?;
3801            let codec = tonic::codec::ProstCodec::default();
3802            let path = http::uri::PathAndQuery::from_static(
3803                "/bilibili.main.community.reply.v1.Reply/SuggestEmotes",
3804            );
3805            let mut req = request.into_request();
3806            req.extensions_mut()
3807                .insert(
3808                    GrpcMethod::new(
3809                        "bilibili.main.community.reply.v1.Reply",
3810                        "SuggestEmotes",
3811                    ),
3812                );
3813            self.inner.unary(req, path, codec).await
3814        }
3815        ///
3816        pub async fn user_callback(
3817            &mut self,
3818            request: impl tonic::IntoRequest<super::UserCallbackReq>,
3819        ) -> std::result::Result<
3820            tonic::Response<super::UserCallbackReply>,
3821            tonic::Status,
3822        > {
3823            self.inner
3824                .ready()
3825                .await
3826                .map_err(|e| {
3827                    tonic::Status::unknown(
3828                        format!("Service was not ready: {}", e.into()),
3829                    )
3830                })?;
3831            let codec = tonic::codec::ProstCodec::default();
3832            let path = http::uri::PathAndQuery::from_static(
3833                "/bilibili.main.community.reply.v1.Reply/UserCallback",
3834            );
3835            let mut req = request.into_request();
3836            req.extensions_mut()
3837                .insert(
3838                    GrpcMethod::new(
3839                        "bilibili.main.community.reply.v1.Reply",
3840                        "UserCallback",
3841                    ),
3842                );
3843            self.inner.unary(req, path, codec).await
3844        }
3845    }
3846}
3847/// Generated server implementations.
3848pub mod reply_server {
3849    #![allow(
3850        unused_variables,
3851        dead_code,
3852        missing_docs,
3853        clippy::wildcard_imports,
3854        clippy::let_unit_value,
3855    )]
3856    use tonic::codegen::*;
3857    /// Generated trait containing gRPC methods that should be implemented for use with ReplyServer.
3858    #[async_trait]
3859    pub trait Reply: std::marker::Send + std::marker::Sync + 'static {
3860        ///
3861        async fn answer_question(
3862            &self,
3863            request: tonic::Request<super::AnswerQuestionReq>,
3864        ) -> std::result::Result<
3865            tonic::Response<super::AnswerQuestionResp>,
3866            tonic::Status,
3867        >;
3868        ///
3869        async fn at_search(
3870            &self,
3871            request: tonic::Request<super::AtSearchReq>,
3872        ) -> std::result::Result<tonic::Response<super::AtSearchReply>, tonic::Status>;
3873        ///
3874        async fn detail_list(
3875            &self,
3876            request: tonic::Request<super::DetailListReq>,
3877        ) -> std::result::Result<tonic::Response<super::DetailListReply>, tonic::Status>;
3878        ///
3879        async fn dialog_list(
3880            &self,
3881            request: tonic::Request<super::DialogListReq>,
3882        ) -> std::result::Result<tonic::Response<super::DialogListReply>, tonic::Status>;
3883        ///
3884        async fn do_vote(
3885            &self,
3886            request: tonic::Request<super::DoVoteReq>,
3887        ) -> std::result::Result<tonic::Response<super::DoVoteResp>, tonic::Status>;
3888        ///
3889        async fn main_list(
3890            &self,
3891            request: tonic::Request<super::MainListReq>,
3892        ) -> std::result::Result<tonic::Response<super::MainListReply>, tonic::Status>;
3893        ///
3894        async fn preview_list(
3895            &self,
3896            request: tonic::Request<super::PreviewListReq>,
3897        ) -> std::result::Result<
3898            tonic::Response<super::PreviewListReply>,
3899            tonic::Status,
3900        >;
3901        ///
3902        async fn reply_info(
3903            &self,
3904            request: tonic::Request<super::ReplyInfoReq>,
3905        ) -> std::result::Result<tonic::Response<super::ReplyInfoReply>, tonic::Status>;
3906        ///
3907        async fn search_item(
3908            &self,
3909            request: tonic::Request<super::SearchItemReq>,
3910        ) -> std::result::Result<tonic::Response<super::SearchItemReply>, tonic::Status>;
3911        ///
3912        async fn search_item_pre_hook(
3913            &self,
3914            request: tonic::Request<super::SearchItemPreHookReq>,
3915        ) -> std::result::Result<
3916            tonic::Response<super::SearchItemPreHookReply>,
3917            tonic::Status,
3918        >;
3919        ///
3920        async fn share_replies_info(
3921            &self,
3922            request: tonic::Request<super::ShareRepliesInfoReq>,
3923        ) -> std::result::Result<
3924            tonic::Response<super::ShareRepliesInfoResp>,
3925            tonic::Status,
3926        >;
3927        ///
3928        async fn share_reply_material(
3929            &self,
3930            request: tonic::Request<super::ShareReplyMaterialReq>,
3931        ) -> std::result::Result<
3932            tonic::Response<super::ShareReplyMaterialResp>,
3933            tonic::Status,
3934        >;
3935        ///
3936        async fn suggest_emotes(
3937            &self,
3938            request: tonic::Request<super::SuggestEmotesReq>,
3939        ) -> std::result::Result<
3940            tonic::Response<super::SuggestEmotesResp>,
3941            tonic::Status,
3942        >;
3943        ///
3944        async fn user_callback(
3945            &self,
3946            request: tonic::Request<super::UserCallbackReq>,
3947        ) -> std::result::Result<
3948            tonic::Response<super::UserCallbackReply>,
3949            tonic::Status,
3950        >;
3951    }
3952    ///
3953    #[derive(Debug)]
3954    pub struct ReplyServer<T> {
3955        inner: Arc<T>,
3956        accept_compression_encodings: EnabledCompressionEncodings,
3957        send_compression_encodings: EnabledCompressionEncodings,
3958        max_decoding_message_size: Option<usize>,
3959        max_encoding_message_size: Option<usize>,
3960    }
3961    impl<T> ReplyServer<T> {
3962        pub fn new(inner: T) -> Self {
3963            Self::from_arc(Arc::new(inner))
3964        }
3965        pub fn from_arc(inner: Arc<T>) -> Self {
3966            Self {
3967                inner,
3968                accept_compression_encodings: Default::default(),
3969                send_compression_encodings: Default::default(),
3970                max_decoding_message_size: None,
3971                max_encoding_message_size: None,
3972            }
3973        }
3974        pub fn with_interceptor<F>(
3975            inner: T,
3976            interceptor: F,
3977        ) -> InterceptedService<Self, F>
3978        where
3979            F: tonic::service::Interceptor,
3980        {
3981            InterceptedService::new(Self::new(inner), interceptor)
3982        }
3983        /// Enable decompressing requests with the given encoding.
3984        #[must_use]
3985        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
3986            self.accept_compression_encodings.enable(encoding);
3987            self
3988        }
3989        /// Compress responses with the given encoding, if the client supports it.
3990        #[must_use]
3991        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
3992            self.send_compression_encodings.enable(encoding);
3993            self
3994        }
3995        /// Limits the maximum size of a decoded message.
3996        ///
3997        /// Default: `4MB`
3998        #[must_use]
3999        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
4000            self.max_decoding_message_size = Some(limit);
4001            self
4002        }
4003        /// Limits the maximum size of an encoded message.
4004        ///
4005        /// Default: `usize::MAX`
4006        #[must_use]
4007        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
4008            self.max_encoding_message_size = Some(limit);
4009            self
4010        }
4011    }
4012    impl<T, B> tonic::codegen::Service<http::Request<B>> for ReplyServer<T>
4013    where
4014        T: Reply,
4015        B: Body + std::marker::Send + 'static,
4016        B::Error: Into<StdError> + std::marker::Send + 'static,
4017    {
4018        type Response = http::Response<tonic::body::BoxBody>;
4019        type Error = std::convert::Infallible;
4020        type Future = BoxFuture<Self::Response, Self::Error>;
4021        fn poll_ready(
4022            &mut self,
4023            _cx: &mut Context<'_>,
4024        ) -> Poll<std::result::Result<(), Self::Error>> {
4025            Poll::Ready(Ok(()))
4026        }
4027        fn call(&mut self, req: http::Request<B>) -> Self::Future {
4028            match req.uri().path() {
4029                "/bilibili.main.community.reply.v1.Reply/AnswerQuestion" => {
4030                    #[allow(non_camel_case_types)]
4031                    struct AnswerQuestionSvc<T: Reply>(pub Arc<T>);
4032                    impl<T: Reply> tonic::server::UnaryService<super::AnswerQuestionReq>
4033                    for AnswerQuestionSvc<T> {
4034                        type Response = super::AnswerQuestionResp;
4035                        type Future = BoxFuture<
4036                            tonic::Response<Self::Response>,
4037                            tonic::Status,
4038                        >;
4039                        fn call(
4040                            &mut self,
4041                            request: tonic::Request<super::AnswerQuestionReq>,
4042                        ) -> Self::Future {
4043                            let inner = Arc::clone(&self.0);
4044                            let fut = async move {
4045                                <T as Reply>::answer_question(&inner, request).await
4046                            };
4047                            Box::pin(fut)
4048                        }
4049                    }
4050                    let accept_compression_encodings = self.accept_compression_encodings;
4051                    let send_compression_encodings = self.send_compression_encodings;
4052                    let max_decoding_message_size = self.max_decoding_message_size;
4053                    let max_encoding_message_size = self.max_encoding_message_size;
4054                    let inner = self.inner.clone();
4055                    let fut = async move {
4056                        let method = AnswerQuestionSvc(inner);
4057                        let codec = tonic::codec::ProstCodec::default();
4058                        let mut grpc = tonic::server::Grpc::new(codec)
4059                            .apply_compression_config(
4060                                accept_compression_encodings,
4061                                send_compression_encodings,
4062                            )
4063                            .apply_max_message_size_config(
4064                                max_decoding_message_size,
4065                                max_encoding_message_size,
4066                            );
4067                        let res = grpc.unary(method, req).await;
4068                        Ok(res)
4069                    };
4070                    Box::pin(fut)
4071                }
4072                "/bilibili.main.community.reply.v1.Reply/AtSearch" => {
4073                    #[allow(non_camel_case_types)]
4074                    struct AtSearchSvc<T: Reply>(pub Arc<T>);
4075                    impl<T: Reply> tonic::server::UnaryService<super::AtSearchReq>
4076                    for AtSearchSvc<T> {
4077                        type Response = super::AtSearchReply;
4078                        type Future = BoxFuture<
4079                            tonic::Response<Self::Response>,
4080                            tonic::Status,
4081                        >;
4082                        fn call(
4083                            &mut self,
4084                            request: tonic::Request<super::AtSearchReq>,
4085                        ) -> Self::Future {
4086                            let inner = Arc::clone(&self.0);
4087                            let fut = async move {
4088                                <T as Reply>::at_search(&inner, request).await
4089                            };
4090                            Box::pin(fut)
4091                        }
4092                    }
4093                    let accept_compression_encodings = self.accept_compression_encodings;
4094                    let send_compression_encodings = self.send_compression_encodings;
4095                    let max_decoding_message_size = self.max_decoding_message_size;
4096                    let max_encoding_message_size = self.max_encoding_message_size;
4097                    let inner = self.inner.clone();
4098                    let fut = async move {
4099                        let method = AtSearchSvc(inner);
4100                        let codec = tonic::codec::ProstCodec::default();
4101                        let mut grpc = tonic::server::Grpc::new(codec)
4102                            .apply_compression_config(
4103                                accept_compression_encodings,
4104                                send_compression_encodings,
4105                            )
4106                            .apply_max_message_size_config(
4107                                max_decoding_message_size,
4108                                max_encoding_message_size,
4109                            );
4110                        let res = grpc.unary(method, req).await;
4111                        Ok(res)
4112                    };
4113                    Box::pin(fut)
4114                }
4115                "/bilibili.main.community.reply.v1.Reply/DetailList" => {
4116                    #[allow(non_camel_case_types)]
4117                    struct DetailListSvc<T: Reply>(pub Arc<T>);
4118                    impl<T: Reply> tonic::server::UnaryService<super::DetailListReq>
4119                    for DetailListSvc<T> {
4120                        type Response = super::DetailListReply;
4121                        type Future = BoxFuture<
4122                            tonic::Response<Self::Response>,
4123                            tonic::Status,
4124                        >;
4125                        fn call(
4126                            &mut self,
4127                            request: tonic::Request<super::DetailListReq>,
4128                        ) -> Self::Future {
4129                            let inner = Arc::clone(&self.0);
4130                            let fut = async move {
4131                                <T as Reply>::detail_list(&inner, request).await
4132                            };
4133                            Box::pin(fut)
4134                        }
4135                    }
4136                    let accept_compression_encodings = self.accept_compression_encodings;
4137                    let send_compression_encodings = self.send_compression_encodings;
4138                    let max_decoding_message_size = self.max_decoding_message_size;
4139                    let max_encoding_message_size = self.max_encoding_message_size;
4140                    let inner = self.inner.clone();
4141                    let fut = async move {
4142                        let method = DetailListSvc(inner);
4143                        let codec = tonic::codec::ProstCodec::default();
4144                        let mut grpc = tonic::server::Grpc::new(codec)
4145                            .apply_compression_config(
4146                                accept_compression_encodings,
4147                                send_compression_encodings,
4148                            )
4149                            .apply_max_message_size_config(
4150                                max_decoding_message_size,
4151                                max_encoding_message_size,
4152                            );
4153                        let res = grpc.unary(method, req).await;
4154                        Ok(res)
4155                    };
4156                    Box::pin(fut)
4157                }
4158                "/bilibili.main.community.reply.v1.Reply/DialogList" => {
4159                    #[allow(non_camel_case_types)]
4160                    struct DialogListSvc<T: Reply>(pub Arc<T>);
4161                    impl<T: Reply> tonic::server::UnaryService<super::DialogListReq>
4162                    for DialogListSvc<T> {
4163                        type Response = super::DialogListReply;
4164                        type Future = BoxFuture<
4165                            tonic::Response<Self::Response>,
4166                            tonic::Status,
4167                        >;
4168                        fn call(
4169                            &mut self,
4170                            request: tonic::Request<super::DialogListReq>,
4171                        ) -> Self::Future {
4172                            let inner = Arc::clone(&self.0);
4173                            let fut = async move {
4174                                <T as Reply>::dialog_list(&inner, request).await
4175                            };
4176                            Box::pin(fut)
4177                        }
4178                    }
4179                    let accept_compression_encodings = self.accept_compression_encodings;
4180                    let send_compression_encodings = self.send_compression_encodings;
4181                    let max_decoding_message_size = self.max_decoding_message_size;
4182                    let max_encoding_message_size = self.max_encoding_message_size;
4183                    let inner = self.inner.clone();
4184                    let fut = async move {
4185                        let method = DialogListSvc(inner);
4186                        let codec = tonic::codec::ProstCodec::default();
4187                        let mut grpc = tonic::server::Grpc::new(codec)
4188                            .apply_compression_config(
4189                                accept_compression_encodings,
4190                                send_compression_encodings,
4191                            )
4192                            .apply_max_message_size_config(
4193                                max_decoding_message_size,
4194                                max_encoding_message_size,
4195                            );
4196                        let res = grpc.unary(method, req).await;
4197                        Ok(res)
4198                    };
4199                    Box::pin(fut)
4200                }
4201                "/bilibili.main.community.reply.v1.Reply/DoVote" => {
4202                    #[allow(non_camel_case_types)]
4203                    struct DoVoteSvc<T: Reply>(pub Arc<T>);
4204                    impl<T: Reply> tonic::server::UnaryService<super::DoVoteReq>
4205                    for DoVoteSvc<T> {
4206                        type Response = super::DoVoteResp;
4207                        type Future = BoxFuture<
4208                            tonic::Response<Self::Response>,
4209                            tonic::Status,
4210                        >;
4211                        fn call(
4212                            &mut self,
4213                            request: tonic::Request<super::DoVoteReq>,
4214                        ) -> Self::Future {
4215                            let inner = Arc::clone(&self.0);
4216                            let fut = async move {
4217                                <T as Reply>::do_vote(&inner, request).await
4218                            };
4219                            Box::pin(fut)
4220                        }
4221                    }
4222                    let accept_compression_encodings = self.accept_compression_encodings;
4223                    let send_compression_encodings = self.send_compression_encodings;
4224                    let max_decoding_message_size = self.max_decoding_message_size;
4225                    let max_encoding_message_size = self.max_encoding_message_size;
4226                    let inner = self.inner.clone();
4227                    let fut = async move {
4228                        let method = DoVoteSvc(inner);
4229                        let codec = tonic::codec::ProstCodec::default();
4230                        let mut grpc = tonic::server::Grpc::new(codec)
4231                            .apply_compression_config(
4232                                accept_compression_encodings,
4233                                send_compression_encodings,
4234                            )
4235                            .apply_max_message_size_config(
4236                                max_decoding_message_size,
4237                                max_encoding_message_size,
4238                            );
4239                        let res = grpc.unary(method, req).await;
4240                        Ok(res)
4241                    };
4242                    Box::pin(fut)
4243                }
4244                "/bilibili.main.community.reply.v1.Reply/MainList" => {
4245                    #[allow(non_camel_case_types)]
4246                    struct MainListSvc<T: Reply>(pub Arc<T>);
4247                    impl<T: Reply> tonic::server::UnaryService<super::MainListReq>
4248                    for MainListSvc<T> {
4249                        type Response = super::MainListReply;
4250                        type Future = BoxFuture<
4251                            tonic::Response<Self::Response>,
4252                            tonic::Status,
4253                        >;
4254                        fn call(
4255                            &mut self,
4256                            request: tonic::Request<super::MainListReq>,
4257                        ) -> Self::Future {
4258                            let inner = Arc::clone(&self.0);
4259                            let fut = async move {
4260                                <T as Reply>::main_list(&inner, request).await
4261                            };
4262                            Box::pin(fut)
4263                        }
4264                    }
4265                    let accept_compression_encodings = self.accept_compression_encodings;
4266                    let send_compression_encodings = self.send_compression_encodings;
4267                    let max_decoding_message_size = self.max_decoding_message_size;
4268                    let max_encoding_message_size = self.max_encoding_message_size;
4269                    let inner = self.inner.clone();
4270                    let fut = async move {
4271                        let method = MainListSvc(inner);
4272                        let codec = tonic::codec::ProstCodec::default();
4273                        let mut grpc = tonic::server::Grpc::new(codec)
4274                            .apply_compression_config(
4275                                accept_compression_encodings,
4276                                send_compression_encodings,
4277                            )
4278                            .apply_max_message_size_config(
4279                                max_decoding_message_size,
4280                                max_encoding_message_size,
4281                            );
4282                        let res = grpc.unary(method, req).await;
4283                        Ok(res)
4284                    };
4285                    Box::pin(fut)
4286                }
4287                "/bilibili.main.community.reply.v1.Reply/PreviewList" => {
4288                    #[allow(non_camel_case_types)]
4289                    struct PreviewListSvc<T: Reply>(pub Arc<T>);
4290                    impl<T: Reply> tonic::server::UnaryService<super::PreviewListReq>
4291                    for PreviewListSvc<T> {
4292                        type Response = super::PreviewListReply;
4293                        type Future = BoxFuture<
4294                            tonic::Response<Self::Response>,
4295                            tonic::Status,
4296                        >;
4297                        fn call(
4298                            &mut self,
4299                            request: tonic::Request<super::PreviewListReq>,
4300                        ) -> Self::Future {
4301                            let inner = Arc::clone(&self.0);
4302                            let fut = async move {
4303                                <T as Reply>::preview_list(&inner, request).await
4304                            };
4305                            Box::pin(fut)
4306                        }
4307                    }
4308                    let accept_compression_encodings = self.accept_compression_encodings;
4309                    let send_compression_encodings = self.send_compression_encodings;
4310                    let max_decoding_message_size = self.max_decoding_message_size;
4311                    let max_encoding_message_size = self.max_encoding_message_size;
4312                    let inner = self.inner.clone();
4313                    let fut = async move {
4314                        let method = PreviewListSvc(inner);
4315                        let codec = tonic::codec::ProstCodec::default();
4316                        let mut grpc = tonic::server::Grpc::new(codec)
4317                            .apply_compression_config(
4318                                accept_compression_encodings,
4319                                send_compression_encodings,
4320                            )
4321                            .apply_max_message_size_config(
4322                                max_decoding_message_size,
4323                                max_encoding_message_size,
4324                            );
4325                        let res = grpc.unary(method, req).await;
4326                        Ok(res)
4327                    };
4328                    Box::pin(fut)
4329                }
4330                "/bilibili.main.community.reply.v1.Reply/ReplyInfo" => {
4331                    #[allow(non_camel_case_types)]
4332                    struct ReplyInfoSvc<T: Reply>(pub Arc<T>);
4333                    impl<T: Reply> tonic::server::UnaryService<super::ReplyInfoReq>
4334                    for ReplyInfoSvc<T> {
4335                        type Response = super::ReplyInfoReply;
4336                        type Future = BoxFuture<
4337                            tonic::Response<Self::Response>,
4338                            tonic::Status,
4339                        >;
4340                        fn call(
4341                            &mut self,
4342                            request: tonic::Request<super::ReplyInfoReq>,
4343                        ) -> Self::Future {
4344                            let inner = Arc::clone(&self.0);
4345                            let fut = async move {
4346                                <T as Reply>::reply_info(&inner, request).await
4347                            };
4348                            Box::pin(fut)
4349                        }
4350                    }
4351                    let accept_compression_encodings = self.accept_compression_encodings;
4352                    let send_compression_encodings = self.send_compression_encodings;
4353                    let max_decoding_message_size = self.max_decoding_message_size;
4354                    let max_encoding_message_size = self.max_encoding_message_size;
4355                    let inner = self.inner.clone();
4356                    let fut = async move {
4357                        let method = ReplyInfoSvc(inner);
4358                        let codec = tonic::codec::ProstCodec::default();
4359                        let mut grpc = tonic::server::Grpc::new(codec)
4360                            .apply_compression_config(
4361                                accept_compression_encodings,
4362                                send_compression_encodings,
4363                            )
4364                            .apply_max_message_size_config(
4365                                max_decoding_message_size,
4366                                max_encoding_message_size,
4367                            );
4368                        let res = grpc.unary(method, req).await;
4369                        Ok(res)
4370                    };
4371                    Box::pin(fut)
4372                }
4373                "/bilibili.main.community.reply.v1.Reply/SearchItem" => {
4374                    #[allow(non_camel_case_types)]
4375                    struct SearchItemSvc<T: Reply>(pub Arc<T>);
4376                    impl<T: Reply> tonic::server::UnaryService<super::SearchItemReq>
4377                    for SearchItemSvc<T> {
4378                        type Response = super::SearchItemReply;
4379                        type Future = BoxFuture<
4380                            tonic::Response<Self::Response>,
4381                            tonic::Status,
4382                        >;
4383                        fn call(
4384                            &mut self,
4385                            request: tonic::Request<super::SearchItemReq>,
4386                        ) -> Self::Future {
4387                            let inner = Arc::clone(&self.0);
4388                            let fut = async move {
4389                                <T as Reply>::search_item(&inner, request).await
4390                            };
4391                            Box::pin(fut)
4392                        }
4393                    }
4394                    let accept_compression_encodings = self.accept_compression_encodings;
4395                    let send_compression_encodings = self.send_compression_encodings;
4396                    let max_decoding_message_size = self.max_decoding_message_size;
4397                    let max_encoding_message_size = self.max_encoding_message_size;
4398                    let inner = self.inner.clone();
4399                    let fut = async move {
4400                        let method = SearchItemSvc(inner);
4401                        let codec = tonic::codec::ProstCodec::default();
4402                        let mut grpc = tonic::server::Grpc::new(codec)
4403                            .apply_compression_config(
4404                                accept_compression_encodings,
4405                                send_compression_encodings,
4406                            )
4407                            .apply_max_message_size_config(
4408                                max_decoding_message_size,
4409                                max_encoding_message_size,
4410                            );
4411                        let res = grpc.unary(method, req).await;
4412                        Ok(res)
4413                    };
4414                    Box::pin(fut)
4415                }
4416                "/bilibili.main.community.reply.v1.Reply/SearchItemPreHook" => {
4417                    #[allow(non_camel_case_types)]
4418                    struct SearchItemPreHookSvc<T: Reply>(pub Arc<T>);
4419                    impl<
4420                        T: Reply,
4421                    > tonic::server::UnaryService<super::SearchItemPreHookReq>
4422                    for SearchItemPreHookSvc<T> {
4423                        type Response = super::SearchItemPreHookReply;
4424                        type Future = BoxFuture<
4425                            tonic::Response<Self::Response>,
4426                            tonic::Status,
4427                        >;
4428                        fn call(
4429                            &mut self,
4430                            request: tonic::Request<super::SearchItemPreHookReq>,
4431                        ) -> Self::Future {
4432                            let inner = Arc::clone(&self.0);
4433                            let fut = async move {
4434                                <T as Reply>::search_item_pre_hook(&inner, request).await
4435                            };
4436                            Box::pin(fut)
4437                        }
4438                    }
4439                    let accept_compression_encodings = self.accept_compression_encodings;
4440                    let send_compression_encodings = self.send_compression_encodings;
4441                    let max_decoding_message_size = self.max_decoding_message_size;
4442                    let max_encoding_message_size = self.max_encoding_message_size;
4443                    let inner = self.inner.clone();
4444                    let fut = async move {
4445                        let method = SearchItemPreHookSvc(inner);
4446                        let codec = tonic::codec::ProstCodec::default();
4447                        let mut grpc = tonic::server::Grpc::new(codec)
4448                            .apply_compression_config(
4449                                accept_compression_encodings,
4450                                send_compression_encodings,
4451                            )
4452                            .apply_max_message_size_config(
4453                                max_decoding_message_size,
4454                                max_encoding_message_size,
4455                            );
4456                        let res = grpc.unary(method, req).await;
4457                        Ok(res)
4458                    };
4459                    Box::pin(fut)
4460                }
4461                "/bilibili.main.community.reply.v1.Reply/ShareRepliesInfo" => {
4462                    #[allow(non_camel_case_types)]
4463                    struct ShareRepliesInfoSvc<T: Reply>(pub Arc<T>);
4464                    impl<
4465                        T: Reply,
4466                    > tonic::server::UnaryService<super::ShareRepliesInfoReq>
4467                    for ShareRepliesInfoSvc<T> {
4468                        type Response = super::ShareRepliesInfoResp;
4469                        type Future = BoxFuture<
4470                            tonic::Response<Self::Response>,
4471                            tonic::Status,
4472                        >;
4473                        fn call(
4474                            &mut self,
4475                            request: tonic::Request<super::ShareRepliesInfoReq>,
4476                        ) -> Self::Future {
4477                            let inner = Arc::clone(&self.0);
4478                            let fut = async move {
4479                                <T as Reply>::share_replies_info(&inner, request).await
4480                            };
4481                            Box::pin(fut)
4482                        }
4483                    }
4484                    let accept_compression_encodings = self.accept_compression_encodings;
4485                    let send_compression_encodings = self.send_compression_encodings;
4486                    let max_decoding_message_size = self.max_decoding_message_size;
4487                    let max_encoding_message_size = self.max_encoding_message_size;
4488                    let inner = self.inner.clone();
4489                    let fut = async move {
4490                        let method = ShareRepliesInfoSvc(inner);
4491                        let codec = tonic::codec::ProstCodec::default();
4492                        let mut grpc = tonic::server::Grpc::new(codec)
4493                            .apply_compression_config(
4494                                accept_compression_encodings,
4495                                send_compression_encodings,
4496                            )
4497                            .apply_max_message_size_config(
4498                                max_decoding_message_size,
4499                                max_encoding_message_size,
4500                            );
4501                        let res = grpc.unary(method, req).await;
4502                        Ok(res)
4503                    };
4504                    Box::pin(fut)
4505                }
4506                "/bilibili.main.community.reply.v1.Reply/ShareReplyMaterial" => {
4507                    #[allow(non_camel_case_types)]
4508                    struct ShareReplyMaterialSvc<T: Reply>(pub Arc<T>);
4509                    impl<
4510                        T: Reply,
4511                    > tonic::server::UnaryService<super::ShareReplyMaterialReq>
4512                    for ShareReplyMaterialSvc<T> {
4513                        type Response = super::ShareReplyMaterialResp;
4514                        type Future = BoxFuture<
4515                            tonic::Response<Self::Response>,
4516                            tonic::Status,
4517                        >;
4518                        fn call(
4519                            &mut self,
4520                            request: tonic::Request<super::ShareReplyMaterialReq>,
4521                        ) -> Self::Future {
4522                            let inner = Arc::clone(&self.0);
4523                            let fut = async move {
4524                                <T as Reply>::share_reply_material(&inner, request).await
4525                            };
4526                            Box::pin(fut)
4527                        }
4528                    }
4529                    let accept_compression_encodings = self.accept_compression_encodings;
4530                    let send_compression_encodings = self.send_compression_encodings;
4531                    let max_decoding_message_size = self.max_decoding_message_size;
4532                    let max_encoding_message_size = self.max_encoding_message_size;
4533                    let inner = self.inner.clone();
4534                    let fut = async move {
4535                        let method = ShareReplyMaterialSvc(inner);
4536                        let codec = tonic::codec::ProstCodec::default();
4537                        let mut grpc = tonic::server::Grpc::new(codec)
4538                            .apply_compression_config(
4539                                accept_compression_encodings,
4540                                send_compression_encodings,
4541                            )
4542                            .apply_max_message_size_config(
4543                                max_decoding_message_size,
4544                                max_encoding_message_size,
4545                            );
4546                        let res = grpc.unary(method, req).await;
4547                        Ok(res)
4548                    };
4549                    Box::pin(fut)
4550                }
4551                "/bilibili.main.community.reply.v1.Reply/SuggestEmotes" => {
4552                    #[allow(non_camel_case_types)]
4553                    struct SuggestEmotesSvc<T: Reply>(pub Arc<T>);
4554                    impl<T: Reply> tonic::server::UnaryService<super::SuggestEmotesReq>
4555                    for SuggestEmotesSvc<T> {
4556                        type Response = super::SuggestEmotesResp;
4557                        type Future = BoxFuture<
4558                            tonic::Response<Self::Response>,
4559                            tonic::Status,
4560                        >;
4561                        fn call(
4562                            &mut self,
4563                            request: tonic::Request<super::SuggestEmotesReq>,
4564                        ) -> Self::Future {
4565                            let inner = Arc::clone(&self.0);
4566                            let fut = async move {
4567                                <T as Reply>::suggest_emotes(&inner, request).await
4568                            };
4569                            Box::pin(fut)
4570                        }
4571                    }
4572                    let accept_compression_encodings = self.accept_compression_encodings;
4573                    let send_compression_encodings = self.send_compression_encodings;
4574                    let max_decoding_message_size = self.max_decoding_message_size;
4575                    let max_encoding_message_size = self.max_encoding_message_size;
4576                    let inner = self.inner.clone();
4577                    let fut = async move {
4578                        let method = SuggestEmotesSvc(inner);
4579                        let codec = tonic::codec::ProstCodec::default();
4580                        let mut grpc = tonic::server::Grpc::new(codec)
4581                            .apply_compression_config(
4582                                accept_compression_encodings,
4583                                send_compression_encodings,
4584                            )
4585                            .apply_max_message_size_config(
4586                                max_decoding_message_size,
4587                                max_encoding_message_size,
4588                            );
4589                        let res = grpc.unary(method, req).await;
4590                        Ok(res)
4591                    };
4592                    Box::pin(fut)
4593                }
4594                "/bilibili.main.community.reply.v1.Reply/UserCallback" => {
4595                    #[allow(non_camel_case_types)]
4596                    struct UserCallbackSvc<T: Reply>(pub Arc<T>);
4597                    impl<T: Reply> tonic::server::UnaryService<super::UserCallbackReq>
4598                    for UserCallbackSvc<T> {
4599                        type Response = super::UserCallbackReply;
4600                        type Future = BoxFuture<
4601                            tonic::Response<Self::Response>,
4602                            tonic::Status,
4603                        >;
4604                        fn call(
4605                            &mut self,
4606                            request: tonic::Request<super::UserCallbackReq>,
4607                        ) -> Self::Future {
4608                            let inner = Arc::clone(&self.0);
4609                            let fut = async move {
4610                                <T as Reply>::user_callback(&inner, request).await
4611                            };
4612                            Box::pin(fut)
4613                        }
4614                    }
4615                    let accept_compression_encodings = self.accept_compression_encodings;
4616                    let send_compression_encodings = self.send_compression_encodings;
4617                    let max_decoding_message_size = self.max_decoding_message_size;
4618                    let max_encoding_message_size = self.max_encoding_message_size;
4619                    let inner = self.inner.clone();
4620                    let fut = async move {
4621                        let method = UserCallbackSvc(inner);
4622                        let codec = tonic::codec::ProstCodec::default();
4623                        let mut grpc = tonic::server::Grpc::new(codec)
4624                            .apply_compression_config(
4625                                accept_compression_encodings,
4626                                send_compression_encodings,
4627                            )
4628                            .apply_max_message_size_config(
4629                                max_decoding_message_size,
4630                                max_encoding_message_size,
4631                            );
4632                        let res = grpc.unary(method, req).await;
4633                        Ok(res)
4634                    };
4635                    Box::pin(fut)
4636                }
4637                _ => {
4638                    Box::pin(async move {
4639                        let mut response = http::Response::new(empty_body());
4640                        let headers = response.headers_mut();
4641                        headers
4642                            .insert(
4643                                tonic::Status::GRPC_STATUS,
4644                                (tonic::Code::Unimplemented as i32).into(),
4645                            );
4646                        headers
4647                            .insert(
4648                                http::header::CONTENT_TYPE,
4649                                tonic::metadata::GRPC_CONTENT_TYPE,
4650                            );
4651                        Ok(response)
4652                    })
4653                }
4654            }
4655        }
4656    }
4657    impl<T> Clone for ReplyServer<T> {
4658        fn clone(&self) -> Self {
4659            let inner = self.inner.clone();
4660            Self {
4661                inner,
4662                accept_compression_encodings: self.accept_compression_encodings,
4663                send_compression_encodings: self.send_compression_encodings,
4664                max_decoding_message_size: self.max_decoding_message_size,
4665                max_encoding_message_size: self.max_encoding_message_size,
4666            }
4667        }
4668    }
4669    /// Generated gRPC service name
4670    pub const SERVICE_NAME: &str = "bilibili.main.community.reply.v1.Reply";
4671    impl<T> tonic::server::NamedService for ReplyServer<T> {
4672        const NAME: &'static str = SERVICE_NAME;
4673    }
4674}