mikufans_proto_intl/
bilibili.app.dynamic.v1.rs

1// This file is @generated by prost-build.
2///
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct AdInfo {
5    ///
6    #[prost(string, tag = "1")]
7    pub nation_code: ::prost::alloc::string::String,
8    ///
9    #[prost(string, tag = "2")]
10    pub adcode: ::prost::alloc::string::String,
11    ///
12    #[prost(string, tag = "3")]
13    pub city_code: ::prost::alloc::string::String,
14    ///
15    #[prost(string, tag = "4")]
16    pub name: ::prost::alloc::string::String,
17    ///
18    #[prost(message, optional, tag = "5")]
19    pub gps: ::core::option::Option<Gps>,
20}
21///
22#[derive(Clone, PartialEq, ::prost::Message)]
23pub struct AddressComponent {
24    ///
25    #[prost(string, tag = "1")]
26    pub nation: ::prost::alloc::string::String,
27    ///
28    #[prost(string, tag = "2")]
29    pub province: ::prost::alloc::string::String,
30    ///
31    #[prost(string, tag = "3")]
32    pub city: ::prost::alloc::string::String,
33    ///
34    #[prost(string, tag = "4")]
35    pub district: ::prost::alloc::string::String,
36    ///
37    #[prost(string, tag = "5")]
38    pub street: ::prost::alloc::string::String,
39    ///
40    #[prost(string, tag = "6")]
41    pub street_number: ::prost::alloc::string::String,
42}
43///
44#[derive(Clone, PartialEq, ::prost::Message)]
45pub struct BubbleInfo {
46    ///
47    #[prost(message, repeated, tag = "1")]
48    pub modules: ::prost::alloc::vec::Vec<BubbleModule>,
49    ///
50    #[prost(string, tag = "2")]
51    pub track_id: ::prost::alloc::string::String,
52    ///
53    #[prost(string, tag = "3")]
54    pub bubble_recall_extra_when_show: ::prost::alloc::string::String,
55}
56///
57#[derive(Clone, PartialEq, ::prost::Message)]
58pub struct BubbleModule {
59    ///
60    #[prost(enumeration = "BubbleModuleType", tag = "1")]
61    pub module_type: i32,
62    ///
63    #[prost(oneof = "bubble_module::Module", tags = "2, 3, 4, 5")]
64    pub module: ::core::option::Option<bubble_module::Module>,
65}
66/// Nested message and enum types in `BubbleModule`.
67pub mod bubble_module {
68    ///
69    #[derive(Clone, PartialEq, ::prost::Oneof)]
70    pub enum Module {
71        ///
72        #[prost(message, tag = "2")]
73        User(super::BubbleModuleUser),
74        ///
75        #[prost(message, tag = "3")]
76        Text(super::BubbleModuleText),
77        ///
78        #[prost(message, tag = "4")]
79        ColoredTip(super::BubbleModuleColoredTip),
80        ///
81        #[prost(message, tag = "5")]
82        Pic(super::BubbleModulePic),
83    }
84}
85///
86#[derive(Clone, PartialEq, ::prost::Message)]
87pub struct BubbleModuleColoredTip {
88    ///
89    #[prost(string, tag = "1")]
90    pub prefix_icon: ::prost::alloc::string::String,
91    ///
92    #[prost(bool, tag = "2")]
93    pub is_svga_prefix_icon: bool,
94    ///
95    #[prost(string, tag = "3")]
96    pub text: ::prost::alloc::string::String,
97    ///
98    #[prost(message, optional, tag = "4")]
99    pub text_color: ::core::option::Option<Color>,
100}
101///
102#[derive(Clone, PartialEq, ::prost::Message)]
103pub struct BubbleModulePic {
104    ///
105    #[prost(string, tag = "1")]
106    pub pic_day: ::prost::alloc::string::String,
107    ///
108    #[prost(string, tag = "2")]
109    pub pic_night: ::prost::alloc::string::String,
110    ///
111    #[prost(int64, tag = "3")]
112    pub pic_width: i64,
113    ///
114    #[prost(int64, tag = "4")]
115    pub pic_height: i64,
116    ///
117    #[prost(bool, tag = "5")]
118    pub rounded_corner: bool,
119    ///
120    #[prost(int64, tag = "6")]
121    pub rounded_corner_radius: i64,
122}
123///
124#[derive(Clone, PartialEq, ::prost::Message)]
125pub struct BubbleModuleText {
126    ///
127    #[prost(string, tag = "1")]
128    pub content: ::prost::alloc::string::String,
129}
130///
131#[derive(Clone, PartialEq, ::prost::Message)]
132pub struct BubbleModuleUser {
133    ///
134    #[prost(message, repeated, tag = "1")]
135    pub users: ::prost::alloc::vec::Vec<UserInfo>,
136}
137///
138#[derive(Clone, PartialEq, ::prost::Message)]
139pub struct CardCurrBatch {
140    ///
141    #[prost(string, tag = "1")]
142    pub title: ::prost::alloc::string::String,
143    ///
144    #[prost(string, tag = "2")]
145    pub cover: ::prost::alloc::string::String,
146    ///
147    #[prost(string, tag = "3")]
148    pub uri: ::prost::alloc::string::String,
149    ///
150    #[prost(string, tag = "4")]
151    pub text1: ::prost::alloc::string::String,
152    ///
153    #[prost(string, tag = "5")]
154    pub text2: ::prost::alloc::string::String,
155    ///
156    #[prost(message, optional, tag = "6")]
157    pub badge: ::core::option::Option<VideoBadge>,
158}
159///
160#[derive(Clone, PartialEq, ::prost::Message)]
161pub struct CardCurrSeason {
162    ///
163    #[prost(string, tag = "1")]
164    pub title: ::prost::alloc::string::String,
165    ///
166    #[prost(string, tag = "2")]
167    pub cover: ::prost::alloc::string::String,
168    ///
169    #[prost(string, tag = "3")]
170    pub uri: ::prost::alloc::string::String,
171    ///
172    #[prost(string, tag = "4")]
173    pub text1: ::prost::alloc::string::String,
174    ///
175    #[prost(string, tag = "5")]
176    pub desc: ::prost::alloc::string::String,
177    ///
178    #[prost(message, optional, tag = "6")]
179    pub badge: ::core::option::Option<VideoBadge>,
180}
181///
182#[derive(Clone, PartialEq, ::prost::Message)]
183pub struct CardPgc {
184    ///
185    #[prost(string, tag = "1")]
186    pub title: ::prost::alloc::string::String,
187    ///
188    #[prost(string, tag = "2")]
189    pub cover: ::prost::alloc::string::String,
190    ///
191    #[prost(string, tag = "3")]
192    pub uri: ::prost::alloc::string::String,
193    ///
194    #[prost(string, tag = "4")]
195    pub cover_left_text1: ::prost::alloc::string::String,
196    ///
197    #[prost(string, tag = "5")]
198    pub cover_left_text2: ::prost::alloc::string::String,
199    ///
200    #[prost(string, tag = "6")]
201    pub cover_left_text3: ::prost::alloc::string::String,
202    ///
203    #[prost(int64, tag = "7")]
204    pub cid: i64,
205    ///
206    #[prost(int64, tag = "8")]
207    pub season_id: i64,
208    ///
209    #[prost(int64, tag = "9")]
210    pub epid: i64,
211    ///
212    #[prost(int64, tag = "10")]
213    pub aid: i64,
214    ///
215    #[prost(enumeration = "MediaType", tag = "11")]
216    pub media_type: i32,
217    ///
218    #[prost(enumeration = "VideoSubType", tag = "12")]
219    pub sub_type: i32,
220    ///
221    #[prost(int32, tag = "13")]
222    pub is_preview: i32,
223    ///
224    #[prost(message, optional, tag = "14")]
225    pub dimension: ::core::option::Option<Dimension>,
226    ///
227    #[prost(message, repeated, tag = "15")]
228    pub badge: ::prost::alloc::vec::Vec<VideoBadge>,
229    ///
230    #[prost(int32, tag = "16")]
231    pub can_play: i32,
232    ///
233    #[prost(message, optional, tag = "17")]
234    pub season: ::core::option::Option<PgcSeason>,
235}
236///
237#[derive(Clone, PartialEq, ::prost::Message)]
238pub struct CardUgc {
239    ///
240    #[prost(string, tag = "1")]
241    pub title: ::prost::alloc::string::String,
242    ///
243    #[prost(string, tag = "2")]
244    pub cover: ::prost::alloc::string::String,
245    ///
246    #[prost(string, tag = "3")]
247    pub uri: ::prost::alloc::string::String,
248    ///
249    #[prost(string, tag = "4")]
250    pub cover_left_text1: ::prost::alloc::string::String,
251    ///
252    #[prost(string, tag = "5")]
253    pub cover_left_text2: ::prost::alloc::string::String,
254    ///
255    #[prost(string, tag = "6")]
256    pub cover_left_text3: ::prost::alloc::string::String,
257    ///
258    #[prost(int64, tag = "7")]
259    pub avid: i64,
260    ///
261    #[prost(int64, tag = "8")]
262    pub cid: i64,
263    ///
264    #[prost(enumeration = "MediaType", tag = "9")]
265    pub media_type: i32,
266    ///
267    #[prost(message, optional, tag = "10")]
268    pub dimension: ::core::option::Option<Dimension>,
269    ///
270    #[prost(message, repeated, tag = "11")]
271    pub badge: ::prost::alloc::vec::Vec<VideoBadge>,
272    ///
273    #[prost(int32, tag = "12")]
274    pub can_play: i32,
275}
276///
277#[derive(Clone, PartialEq, ::prost::Message)]
278pub struct Color {
279    ///
280    #[prost(string, tag = "1")]
281    pub color_day: ::prost::alloc::string::String,
282    ///
283    #[prost(string, tag = "2")]
284    pub color_night: ::prost::alloc::string::String,
285}
286///
287#[derive(Clone, PartialEq, ::prost::Message)]
288pub struct CornerInfo {
289    ///
290    #[prost(enumeration = "CornerType", tag = "1")]
291    pub corner_type: i32,
292    ///
293    #[prost(string, tag = "2")]
294    pub corner_text: ::prost::alloc::string::String,
295    ///
296    #[prost(message, optional, tag = "3")]
297    pub corner_text_color: ::core::option::Option<Color>,
298    ///
299    #[prost(message, optional, tag = "4")]
300    pub corner_text_bg_color: ::core::option::Option<Color>,
301    ///
302    #[prost(string, tag = "5")]
303    pub corner_icon: ::prost::alloc::string::String,
304    ///
305    #[prost(int64, tag = "6")]
306    pub corner_number: i64,
307}
308///
309#[derive(Clone, PartialEq, ::prost::Message)]
310pub struct DecoCardFan {
311    ///
312    #[prost(int32, tag = "1")]
313    pub is_fan: i32,
314    ///
315    #[prost(int32, tag = "2")]
316    pub number: i32,
317    ///
318    #[prost(string, tag = "3")]
319    pub color: ::prost::alloc::string::String,
320}
321///
322#[derive(Clone, PartialEq, ::prost::Message)]
323pub struct DecorateCard {
324    ///
325    #[prost(int64, tag = "1")]
326    pub id: i64,
327    ///
328    #[prost(string, tag = "2")]
329    pub card_url: ::prost::alloc::string::String,
330    ///
331    #[prost(string, tag = "3")]
332    pub jump_url: ::prost::alloc::string::String,
333    ///
334    #[prost(message, optional, tag = "4")]
335    pub fan: ::core::option::Option<DecoCardFan>,
336}
337///
338#[derive(Clone, PartialEq, ::prost::Message)]
339pub struct Description {
340    ///
341    #[prost(string, tag = "1")]
342    pub text: ::prost::alloc::string::String,
343    ///
344    #[prost(string, tag = "2")]
345    pub r#type: ::prost::alloc::string::String,
346    ///
347    #[prost(string, tag = "3")]
348    pub uri: ::prost::alloc::string::String,
349    ///
350    #[prost(string, tag = "4")]
351    pub emoji_type: ::prost::alloc::string::String,
352    ///
353    #[prost(string, tag = "5")]
354    pub goods_type: ::prost::alloc::string::String,
355}
356///
357#[derive(Clone, Copy, PartialEq, ::prost::Message)]
358pub struct Dimension {
359    ///
360    #[prost(int64, tag = "1")]
361    pub height: i64,
362    ///
363    #[prost(int64, tag = "2")]
364    pub width: i64,
365    ///
366    #[prost(int64, tag = "3")]
367    pub rotate: i64,
368}
369///
370#[derive(Clone, PartialEq, ::prost::Message)]
371pub struct DynDetailsReply {
372    ///
373    #[prost(message, repeated, tag = "1")]
374    pub list: ::prost::alloc::vec::Vec<DynamicItem>,
375}
376///
377#[derive(Clone, PartialEq, ::prost::Message)]
378pub struct DynDetailsReq {
379    ///
380    #[prost(int32, tag = "1")]
381    pub teenagers_mode: i32,
382    ///
383    #[prost(string, tag = "2")]
384    pub dynamic_ids: ::prost::alloc::string::String,
385    ///
386    #[prost(int32, tag = "3")]
387    pub qn: i32,
388    ///
389    #[prost(int32, tag = "4")]
390    pub fnver: i32,
391    ///
392    #[prost(int32, tag = "5")]
393    pub fnval: i32,
394    ///
395    #[prost(int32, tag = "6")]
396    pub force_host: i32,
397    ///
398    #[prost(int32, tag = "7")]
399    pub fourk: i32,
400}
401///
402#[derive(Clone, PartialEq, ::prost::Message)]
403pub struct DynMixUpListSearchReply {
404    ///
405    #[prost(message, repeated, tag = "1")]
406    pub items: ::prost::alloc::vec::Vec<MixUpListItem>,
407}
408///
409#[derive(Clone, PartialEq, ::prost::Message)]
410pub struct DynMixUpListSearchReq {
411    ///
412    #[prost(string, tag = "1")]
413    pub name: ::prost::alloc::string::String,
414}
415///
416#[derive(Clone, PartialEq, ::prost::Message)]
417pub struct DynMixUpListViewMoreReply {
418    ///
419    #[prost(message, repeated, tag = "1")]
420    pub items: ::prost::alloc::vec::Vec<MixUpListItem>,
421    ///
422    #[prost(string, tag = "2")]
423    pub search_default_text: ::prost::alloc::string::String,
424}
425///
426#[derive(Clone, PartialEq, ::prost::Message)]
427pub struct DynOurCityItem {
428    ///
429    #[prost(string, tag = "1")]
430    pub card_type: ::prost::alloc::string::String,
431    ///
432    #[prost(int64, tag = "2")]
433    pub dyn_id: i64,
434    ///
435    #[prost(string, tag = "3")]
436    pub uri: ::prost::alloc::string::String,
437    ///
438    #[prost(message, repeated, tag = "4")]
439    pub modules: ::prost::alloc::vec::Vec<DynOurCityModule>,
440    ///
441    #[prost(int64, tag = "5")]
442    pub rid: i64,
443    ///
444    #[prost(string, tag = "6")]
445    pub debug_info: ::prost::alloc::string::String,
446}
447///
448#[derive(Clone, PartialEq, ::prost::Message)]
449pub struct DynOurCityModule {
450    ///
451    #[prost(string, tag = "1")]
452    pub module_type: ::prost::alloc::string::String,
453    ///
454    #[prost(oneof = "dyn_our_city_module::ModuleItem", tags = "2, 3, 4, 5")]
455    pub module_item: ::core::option::Option<dyn_our_city_module::ModuleItem>,
456}
457/// Nested message and enum types in `DynOurCityModule`.
458pub mod dyn_our_city_module {
459    ///
460    #[derive(Clone, PartialEq, ::prost::Oneof)]
461    pub enum ModuleItem {
462        ///
463        #[prost(message, tag = "2")]
464        ModuleCover(super::DynOurCityModuleCover),
465        ///
466        #[prost(message, tag = "3")]
467        ModuleDesc(super::DynOurCityModuleDesc),
468        ///
469        #[prost(message, tag = "4")]
470        ModuleAuthor(super::DynOurCityModuleAuthor),
471        ///
472        #[prost(message, tag = "5")]
473        ModuleExtend(super::DynOurCityModuleExtend),
474    }
475}
476///
477#[derive(Clone, PartialEq, ::prost::Message)]
478pub struct DynOurCityModuleAuthor {
479    ///
480    #[prost(int64, tag = "1")]
481    pub mid: i64,
482    ///
483    #[prost(string, tag = "2")]
484    pub name: ::prost::alloc::string::String,
485    ///
486    #[prost(string, tag = "3")]
487    pub face: ::prost::alloc::string::String,
488    ///
489    #[prost(string, tag = "4")]
490    pub uri: ::prost::alloc::string::String,
491}
492///
493#[derive(Clone, PartialEq, ::prost::Message)]
494pub struct DynOurCityModuleCover {
495    ///
496    #[prost(string, repeated, tag = "1")]
497    pub covers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
498    ///
499    #[prost(int32, tag = "2")]
500    pub style: i32,
501    ///
502    #[prost(int32, tag = "3")]
503    pub cover_left_icon1: i32,
504    ///
505    #[prost(string, tag = "4")]
506    pub cover_left_text1: ::prost::alloc::string::String,
507    ///
508    #[prost(int32, tag = "5")]
509    pub cover_left_icon2: i32,
510    ///
511    #[prost(string, tag = "6")]
512    pub cover_left_text2: ::prost::alloc::string::String,
513    ///
514    #[prost(string, tag = "7")]
515    pub cover_left_text3: ::prost::alloc::string::String,
516    ///
517    #[prost(message, repeated, tag = "8")]
518    pub badge: ::prost::alloc::vec::Vec<VideoBadge>,
519}
520///
521#[derive(Clone, PartialEq, ::prost::Message)]
522pub struct DynOurCityModuleDesc {
523    ///
524    #[prost(string, tag = "1")]
525    pub desc: ::prost::alloc::string::String,
526}
527///
528#[derive(Clone, PartialEq, ::prost::Message)]
529pub struct DynOurCityModuleExtend {
530    ///
531    #[prost(string, tag = "1")]
532    pub r#type: ::prost::alloc::string::String,
533    ///
534    #[prost(oneof = "dyn_our_city_module_extend::Extend", tags = "2")]
535    pub extend: ::core::option::Option<dyn_our_city_module_extend::Extend>,
536}
537/// Nested message and enum types in `DynOurCityModuleExtend`.
538pub mod dyn_our_city_module_extend {
539    ///
540    #[derive(Clone, PartialEq, ::prost::Oneof)]
541    pub enum Extend {
542        ///
543        #[prost(message, tag = "2")]
544        ExtendLbs(super::DynOurCityModuleExtendLbs),
545    }
546}
547///
548#[derive(Clone, PartialEq, ::prost::Message)]
549pub struct DynOurCityModuleExtendLbs {
550    ///
551    #[prost(string, tag = "1")]
552    pub title: ::prost::alloc::string::String,
553    ///
554    #[prost(string, tag = "2")]
555    pub uri: ::prost::alloc::string::String,
556    ///
557    #[prost(string, tag = "3")]
558    pub icon: ::prost::alloc::string::String,
559    ///
560    #[prost(int32, tag = "4")]
561    pub poi_type: i32,
562}
563///
564#[derive(Clone, PartialEq, ::prost::Message)]
565pub struct DynOurCityReply {
566    ///
567    #[prost(string, tag = "1")]
568    pub offset: ::prost::alloc::string::String,
569    ///
570    #[prost(int32, tag = "2")]
571    pub has_more: i32,
572    ///
573    #[prost(int32, tag = "3")]
574    pub style: i32,
575    ///
576    #[prost(string, tag = "4")]
577    pub top_label: ::prost::alloc::string::String,
578    ///
579    #[prost(message, repeated, tag = "5")]
580    pub list: ::prost::alloc::vec::Vec<DynOurCityItem>,
581    ///
582    #[prost(string, tag = "6")]
583    pub top_button_label: ::prost::alloc::string::String,
584    ///
585    #[prost(int32, tag = "7")]
586    pub city_id: i32,
587    ///
588    #[prost(string, tag = "8")]
589    pub city_name: ::prost::alloc::string::String,
590}
591///
592#[derive(Clone, PartialEq, ::prost::Message)]
593pub struct DynOurCityReq {
594    ///
595    #[prost(int64, tag = "1")]
596    pub city_id: i64,
597    ///
598    #[prost(double, tag = "2")]
599    pub lat: f64,
600    ///
601    #[prost(double, tag = "3")]
602    pub lng: f64,
603    ///
604    #[prost(string, tag = "4")]
605    pub offset: ::prost::alloc::string::String,
606    ///
607    #[prost(int32, tag = "5")]
608    pub page_size: i32,
609    ///
610    #[prost(int32, tag = "6")]
611    pub teenagers_mode: i32,
612    ///
613    #[prost(int32, tag = "7")]
614    pub qn: i32,
615    ///
616    #[prost(int32, tag = "8")]
617    pub fnver: i32,
618    ///
619    #[prost(int32, tag = "9")]
620    pub fnval: i32,
621    ///
622    #[prost(int32, tag = "10")]
623    pub force_host: i32,
624    ///
625    #[prost(int32, tag = "11")]
626    pub fourk: i32,
627    ///
628    #[prost(int32, tag = "12")]
629    pub lbs_state: i32,
630    ///
631    #[prost(int32, tag = "13")]
632    pub refresh_city: i32,
633    ///
634    #[prost(message, optional, tag = "14")]
635    pub exp_conf: ::core::option::Option<ExpConf>,
636    ///
637    #[prost(message, optional, tag = "15")]
638    pub player_args: ::core::option::Option<
639        super::super::archive::middleware::v1::PlayerArgs,
640    >,
641    ///
642    #[prost(int64, tag = "16")]
643    pub city_code: i64,
644    ///
645    #[prost(int64, tag = "17")]
646    pub build_time: i64,
647}
648///
649#[derive(Clone, Copy, PartialEq, ::prost::Message)]
650pub struct DynOurCitySwitchReq {
651    ///
652    #[prost(int32, tag = "1")]
653    pub switch: i32,
654}
655///
656#[derive(Clone, Copy, PartialEq, ::prost::Message)]
657pub struct DynRedItem {
658    ///
659    #[prost(int64, tag = "1")]
660    pub count: i64,
661}
662///
663#[derive(Clone, PartialEq, ::prost::Message)]
664pub struct DynRedReply {
665    ///
666    #[prost(string, tag = "1")]
667    pub red_type: ::prost::alloc::string::String,
668    ///
669    #[prost(message, optional, tag = "2")]
670    pub dyn_red_item: ::core::option::Option<DynRedItem>,
671    ///
672    #[prost(string, tag = "3")]
673    pub default_tab: ::prost::alloc::string::String,
674    ///
675    #[prost(message, optional, tag = "4")]
676    pub red_style: ::core::option::Option<DynRedStyle>,
677    ///
678    #[prost(string, tag = "5")]
679    pub tab_recall_extra: ::prost::alloc::string::String,
680    ///
681    #[prost(message, optional, tag = "6")]
682    pub bubble_info: ::core::option::Option<BubbleInfo>,
683}
684///
685#[derive(Clone, PartialEq, ::prost::Message)]
686pub struct DynRedReq {
687    ///
688    #[prost(message, repeated, tag = "1")]
689    pub tab_offset: ::prost::alloc::vec::Vec<TabOffset>,
690    ///
691    #[prost(bool, tag = "2")]
692    pub is_new_install: bool,
693    ///
694    #[prost(bool, tag = "3")]
695    pub is_code_start: bool,
696    ///
697    #[prost(int64, repeated, tag = "4")]
698    pub new_follow_up_mids: ::prost::alloc::vec::Vec<i64>,
699    ///
700    #[prost(enumeration = "dyn_red_req::DynRedReqScene", tag = "5")]
701    pub req_scene: i32,
702}
703/// Nested message and enum types in `DynRedReq`.
704pub mod dyn_red_req {
705    ///
706    #[derive(
707        Clone,
708        Copy,
709        Debug,
710        PartialEq,
711        Eq,
712        Hash,
713        PartialOrd,
714        Ord,
715        ::prost::Enumeration
716    )]
717    #[repr(i32)]
718    pub enum DynRedReqScene {
719        ///
720        RedReqNone = 0,
721        ///
722        RedReqReturnToTab1 = 1,
723        ///
724        RedReqPeriodicallyAwake = 2,
725        ///
726        RedReqSwitchAccount = 3,
727    }
728    impl DynRedReqScene {
729        /// String value of the enum field names used in the ProtoBuf definition.
730        ///
731        /// The values are not transformed in any way and thus are considered stable
732        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
733        pub fn as_str_name(&self) -> &'static str {
734            match self {
735                Self::RedReqNone => "RED_REQ_NONE",
736                Self::RedReqReturnToTab1 => "RED_REQ_RETURN_TO_TAB_1",
737                Self::RedReqPeriodicallyAwake => "RED_REQ_PERIODICALLY_AWAKE",
738                Self::RedReqSwitchAccount => "RED_REQ_SWITCH_ACCOUNT",
739            }
740        }
741        /// Creates an enum from field names used in the ProtoBuf definition.
742        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
743            match value {
744                "RED_REQ_NONE" => Some(Self::RedReqNone),
745                "RED_REQ_RETURN_TO_TAB_1" => Some(Self::RedReqReturnToTab1),
746                "RED_REQ_PERIODICALLY_AWAKE" => Some(Self::RedReqPeriodicallyAwake),
747                "RED_REQ_SWITCH_ACCOUNT" => Some(Self::RedReqSwitchAccount),
748                _ => None,
749            }
750        }
751    }
752}
753///
754#[derive(Clone, PartialEq, ::prost::Message)]
755pub struct DynRedStyle {
756    ///
757    #[prost(enumeration = "BgType", tag = "1")]
758    pub bg_type: i32,
759    ///
760    #[prost(enumeration = "CornerType", tag = "2")]
761    pub corner_type: i32,
762    ///
763    #[prost(int32, tag = "3")]
764    pub display_time: i32,
765    ///
766    #[prost(string, tag = "4")]
767    pub corner_mark: ::prost::alloc::string::String,
768    ///
769    #[prost(message, optional, tag = "5")]
770    pub up: ::core::option::Option<DynRedStyleUp>,
771    ///
772    #[prost(enumeration = "StyleType", tag = "6")]
773    pub r#type: i32,
774    ///
775    #[prost(message, optional, tag = "7")]
776    pub corner_info: ::core::option::Option<CornerInfo>,
777}
778///
779#[derive(Clone, PartialEq, ::prost::Message)]
780pub struct DynRedStyleUp {
781    ///
782    #[prost(int64, tag = "1")]
783    pub uid: i64,
784    ///
785    #[prost(string, tag = "2")]
786    pub face: ::prost::alloc::string::String,
787    ///
788    #[prost(enumeration = "StyleType", tag = "3")]
789    pub face_type: i32,
790    ///
791    #[prost(message, optional, tag = "4")]
792    pub border_color: ::core::option::Option<Color>,
793}
794///
795#[derive(Clone, PartialEq, ::prost::Message)]
796pub struct DynTab {
797    ///
798    #[prost(string, tag = "1")]
799    pub title: ::prost::alloc::string::String,
800    ///
801    #[prost(string, tag = "2")]
802    pub uri: ::prost::alloc::string::String,
803    ///
804    #[prost(string, tag = "3")]
805    pub bubble: ::prost::alloc::string::String,
806    ///
807    #[prost(int32, tag = "4")]
808    pub red_point: i32,
809    ///
810    #[prost(int64, tag = "5")]
811    pub city_id: i64,
812    ///
813    #[prost(int32, tag = "6")]
814    pub is_popup: i32,
815    ///
816    #[prost(message, optional, tag = "7")]
817    pub popup: ::core::option::Option<Popup>,
818    ///
819    #[prost(bool, tag = "8")]
820    pub default_tab: bool,
821    ///
822    #[prost(string, tag = "9")]
823    pub sub_title: ::prost::alloc::string::String,
824    ///
825    #[prost(string, tag = "10")]
826    pub anchor: ::prost::alloc::string::String,
827    ///
828    #[prost(string, tag = "11")]
829    pub internal_test: ::prost::alloc::string::String,
830}
831///
832#[derive(Clone, PartialEq, ::prost::Message)]
833pub struct DynTabReply {
834    ///
835    #[prost(message, repeated, tag = "1")]
836    pub dyn_tab: ::prost::alloc::vec::Vec<DynTab>,
837}
838///
839#[derive(Clone, Copy, PartialEq, ::prost::Message)]
840pub struct DynTabReq {
841    ///
842    #[prost(int32, tag = "1")]
843    pub teenagers_mode: i32,
844}
845///
846#[derive(Clone, PartialEq, ::prost::Message)]
847pub struct DynUpdOffsetReq {
848    ///
849    #[prost(int64, tag = "1")]
850    pub host_uid: i64,
851    ///
852    #[prost(string, tag = "2")]
853    pub read_offset: ::prost::alloc::string::String,
854}
855///
856#[derive(Clone, PartialEq, ::prost::Message)]
857pub struct DynVideoPersonalReply {
858    ///
859    #[prost(message, repeated, tag = "1")]
860    pub list: ::prost::alloc::vec::Vec<DynamicItem>,
861    ///
862    #[prost(string, tag = "2")]
863    pub offset: ::prost::alloc::string::String,
864    ///
865    #[prost(int32, tag = "3")]
866    pub has_more: i32,
867    ///
868    #[prost(string, tag = "4")]
869    pub read_offset: ::prost::alloc::string::String,
870}
871///
872#[derive(Clone, PartialEq, ::prost::Message)]
873pub struct DynVideoPersonalReq {
874    ///
875    #[prost(int32, tag = "1")]
876    pub teenagers_mode: i32,
877    ///
878    #[prost(int64, tag = "2")]
879    pub host_uid: i64,
880    ///
881    #[prost(string, tag = "3")]
882    pub offset: ::prost::alloc::string::String,
883    ///
884    #[prost(int32, tag = "4")]
885    pub page: i32,
886    ///
887    #[prost(int32, tag = "5")]
888    pub is_preload: i32,
889    ///
890    #[prost(int32, tag = "6")]
891    pub qn: i32,
892    ///
893    #[prost(int32, tag = "7")]
894    pub fnver: i32,
895    ///
896    #[prost(int32, tag = "8")]
897    pub fnval: i32,
898    ///
899    #[prost(int32, tag = "9")]
900    pub force_host: i32,
901    ///
902    #[prost(int32, tag = "10")]
903    pub fourk: i32,
904}
905///
906#[derive(Clone, PartialEq, ::prost::Message)]
907pub struct DynVideoReq {
908    ///
909    #[prost(int32, tag = "1")]
910    pub teenagers_mode: i32,
911    ///
912    #[prost(string, tag = "2")]
913    pub update_baseline: ::prost::alloc::string::String,
914    ///
915    #[prost(string, tag = "3")]
916    pub offset: ::prost::alloc::string::String,
917    ///
918    #[prost(int32, tag = "4")]
919    pub page: i32,
920    ///
921    #[prost(int32, tag = "5")]
922    pub refresh_type: i32,
923    ///
924    #[prost(int32, tag = "6")]
925    pub qn: i32,
926    ///
927    #[prost(int32, tag = "7")]
928    pub fnver: i32,
929    ///
930    #[prost(int32, tag = "8")]
931    pub fnval: i32,
932    ///
933    #[prost(int32, tag = "9")]
934    pub force_host: i32,
935    ///
936    #[prost(int32, tag = "10")]
937    pub fourk: i32,
938}
939///
940#[derive(Clone, PartialEq, ::prost::Message)]
941pub struct DynVideoReqReply {
942    ///
943    #[prost(message, repeated, tag = "1")]
944    pub list: ::prost::alloc::vec::Vec<DynamicItem>,
945    ///
946    #[prost(int32, tag = "2")]
947    pub update_num: i32,
948    ///
949    #[prost(string, tag = "3")]
950    pub history_offset: ::prost::alloc::string::String,
951    ///
952    #[prost(string, tag = "4")]
953    pub update_baseline: ::prost::alloc::string::String,
954    ///
955    #[prost(int32, tag = "5")]
956    pub has_more: i32,
957}
958///
959#[derive(Clone, PartialEq, ::prost::Message)]
960pub struct DynamicItem {
961    ///
962    #[prost(string, tag = "1")]
963    pub card_type: ::prost::alloc::string::String,
964    ///
965    #[prost(string, tag = "2")]
966    pub item_type: ::prost::alloc::string::String,
967    ///
968    #[prost(message, repeated, tag = "3")]
969    pub modules: ::prost::alloc::vec::Vec<Module>,
970    ///
971    #[prost(string, tag = "4")]
972    pub dyn_id_str: ::prost::alloc::string::String,
973    ///
974    #[prost(string, tag = "5")]
975    pub orig_dyn_id_str: ::prost::alloc::string::String,
976    ///
977    #[prost(int32, tag = "6")]
978    pub r_type: i32,
979    ///
980    #[prost(int32, tag = "7")]
981    pub has_fold: i32,
982}
983///
984#[derive(Clone, PartialEq, ::prost::Message)]
985pub struct Exp {
986    ///
987    #[prost(string, tag = "1")]
988    pub exp_name: ::prost::alloc::string::String,
989    ///
990    #[prost(string, tag = "2")]
991    pub exp_group: ::prost::alloc::string::String,
992}
993///
994#[derive(Clone, PartialEq, ::prost::Message)]
995pub struct ExpConf {
996    ///
997    #[prost(int32, tag = "1")]
998    pub exp_enable: i32,
999    ///
1000    #[prost(message, repeated, tag = "2")]
1001    pub exps: ::prost::alloc::vec::Vec<Exp>,
1002}
1003///
1004#[derive(Clone, PartialEq, ::prost::Message)]
1005pub struct ExtInfoGame {
1006    ///
1007    #[prost(string, tag = "1")]
1008    pub title: ::prost::alloc::string::String,
1009    ///
1010    #[prost(string, tag = "2")]
1011    pub uri: ::prost::alloc::string::String,
1012    ///
1013    #[prost(string, tag = "3")]
1014    pub icon: ::prost::alloc::string::String,
1015}
1016///
1017#[derive(Clone, PartialEq, ::prost::Message)]
1018pub struct ExtInfoHot {
1019    ///
1020    #[prost(string, tag = "1")]
1021    pub title: ::prost::alloc::string::String,
1022    ///
1023    #[prost(string, tag = "2")]
1024    pub uri: ::prost::alloc::string::String,
1025    ///
1026    #[prost(string, tag = "3")]
1027    pub icon: ::prost::alloc::string::String,
1028}
1029///
1030#[derive(Clone, PartialEq, ::prost::Message)]
1031pub struct ExtInfoLbs {
1032    ///
1033    #[prost(string, tag = "1")]
1034    pub title: ::prost::alloc::string::String,
1035    ///
1036    #[prost(string, tag = "2")]
1037    pub uri: ::prost::alloc::string::String,
1038    ///
1039    #[prost(string, tag = "3")]
1040    pub icon: ::prost::alloc::string::String,
1041    ///
1042    #[prost(int32, tag = "4")]
1043    pub poi_type: i32,
1044}
1045///
1046#[derive(Clone, PartialEq, ::prost::Message)]
1047pub struct ExtInfoTopic {
1048    ///
1049    #[prost(string, tag = "1")]
1050    pub title: ::prost::alloc::string::String,
1051    ///
1052    #[prost(string, tag = "2")]
1053    pub uri: ::prost::alloc::string::String,
1054    ///
1055    #[prost(string, tag = "3")]
1056    pub icon: ::prost::alloc::string::String,
1057}
1058///
1059#[derive(Clone, PartialEq, ::prost::Message)]
1060pub struct Extend {
1061    ///
1062    #[prost(string, tag = "1")]
1063    pub r#type: ::prost::alloc::string::String,
1064    ///
1065    #[prost(oneof = "extend::Extend", tags = "2, 3, 4, 5")]
1066    pub extend: ::core::option::Option<extend::Extend>,
1067}
1068/// Nested message and enum types in `Extend`.
1069pub mod extend {
1070    ///
1071    #[derive(Clone, PartialEq, ::prost::Oneof)]
1072    pub enum Extend {
1073        ///
1074        #[prost(message, tag = "2")]
1075        ExtInfoTopic(super::ExtInfoTopic),
1076        ///
1077        #[prost(message, tag = "3")]
1078        ExtInfoLbs(super::ExtInfoLbs),
1079        ///
1080        #[prost(message, tag = "4")]
1081        ExtInfoHot(super::ExtInfoHot),
1082        ///
1083        #[prost(message, tag = "5")]
1084        ExtInfoGame(super::ExtInfoGame),
1085    }
1086}
1087///
1088#[derive(Clone, PartialEq, ::prost::Message)]
1089pub struct FollowListItem {
1090    ///
1091    #[prost(int32, tag = "1")]
1092    pub season_id: i32,
1093    ///
1094    #[prost(string, tag = "2")]
1095    pub title: ::prost::alloc::string::String,
1096    ///
1097    #[prost(string, tag = "3")]
1098    pub cover: ::prost::alloc::string::String,
1099    ///
1100    #[prost(string, tag = "4")]
1101    pub url: ::prost::alloc::string::String,
1102    ///
1103    #[prost(message, optional, tag = "5")]
1104    pub new_ep: ::core::option::Option<NewEp>,
1105}
1106///
1107#[derive(Clone, PartialEq, ::prost::Message)]
1108pub struct GeoCoderReply {
1109    ///
1110    #[prost(string, tag = "1")]
1111    pub address: ::prost::alloc::string::String,
1112    ///
1113    #[prost(message, optional, tag = "2")]
1114    pub address_component: ::core::option::Option<AddressComponent>,
1115    ///
1116    #[prost(message, optional, tag = "3")]
1117    pub ad_info: ::core::option::Option<AdInfo>,
1118}
1119///
1120#[derive(Clone, PartialEq, ::prost::Message)]
1121pub struct GeoCoderReq {
1122    ///
1123    #[prost(double, tag = "1")]
1124    pub lat: f64,
1125    ///
1126    #[prost(double, tag = "2")]
1127    pub lng: f64,
1128    ///
1129    #[prost(string, tag = "3")]
1130    pub from: ::prost::alloc::string::String,
1131}
1132///
1133#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1134pub struct Gps {
1135    ///
1136    #[prost(double, tag = "1")]
1137    pub lat: f64,
1138    ///
1139    #[prost(double, tag = "2")]
1140    pub lng: f64,
1141}
1142///
1143#[derive(Clone, PartialEq, ::prost::Message)]
1144pub struct LikeAnimation {
1145    ///
1146    #[prost(string, tag = "1")]
1147    pub begin: ::prost::alloc::string::String,
1148    ///
1149    #[prost(string, tag = "2")]
1150    pub proc: ::prost::alloc::string::String,
1151    ///
1152    #[prost(string, tag = "3")]
1153    pub end: ::prost::alloc::string::String,
1154    ///
1155    #[prost(int64, tag = "4")]
1156    pub like_icon_id: i64,
1157}
1158///
1159#[derive(Clone, PartialEq, ::prost::Message)]
1160pub struct LikeInfo {
1161    ///
1162    #[prost(message, optional, tag = "1")]
1163    pub animation: ::core::option::Option<LikeAnimation>,
1164    ///
1165    #[prost(int32, tag = "2")]
1166    pub is_like: i32,
1167}
1168///
1169#[derive(Clone, PartialEq, ::prost::Message)]
1170pub struct LikeUser {
1171    ///
1172    #[prost(int64, tag = "1")]
1173    pub uid: i64,
1174    ///
1175    #[prost(string, tag = "2")]
1176    pub uname: ::prost::alloc::string::String,
1177    ///
1178    #[prost(string, tag = "3")]
1179    pub uri: ::prost::alloc::string::String,
1180}
1181///
1182#[derive(Clone, PartialEq, ::prost::Message)]
1183pub struct LiveInfo {
1184    ///
1185    #[prost(int32, tag = "1")]
1186    pub is_living: i32,
1187    ///
1188    #[prost(string, tag = "2")]
1189    pub uri: ::prost::alloc::string::String,
1190}
1191///
1192#[derive(Clone, PartialEq, ::prost::Message)]
1193pub struct MixUpListItem {
1194    ///
1195    #[prost(int64, tag = "1")]
1196    pub uid: i64,
1197    ///
1198    #[prost(int32, tag = "2")]
1199    pub special_attention: i32,
1200    ///
1201    #[prost(int32, tag = "3")]
1202    pub reddot_state: i32,
1203    ///
1204    #[prost(message, optional, tag = "4")]
1205    pub live_info: ::core::option::Option<MixUpListLiveItem>,
1206    ///
1207    #[prost(string, tag = "5")]
1208    pub name: ::prost::alloc::string::String,
1209    ///
1210    #[prost(string, tag = "6")]
1211    pub face: ::prost::alloc::string::String,
1212    ///
1213    #[prost(message, optional, tag = "7")]
1214    pub official: ::core::option::Option<OfficialVerify>,
1215    ///
1216    #[prost(message, optional, tag = "8")]
1217    pub vip: ::core::option::Option<VipInfo>,
1218    ///
1219    #[prost(message, optional, tag = "9")]
1220    pub relation: ::core::option::Option<Relation>,
1221    ///
1222    #[prost(int32, tag = "10")]
1223    pub premiere_state: i32,
1224    ///
1225    #[prost(string, tag = "11")]
1226    pub uri: ::prost::alloc::string::String,
1227}
1228///
1229#[derive(Clone, PartialEq, ::prost::Message)]
1230pub struct MixUpListLiveItem {
1231    ///
1232    #[prost(bool, tag = "1")]
1233    pub status: bool,
1234    ///
1235    #[prost(int64, tag = "2")]
1236    pub room_id: i64,
1237    ///
1238    #[prost(string, tag = "3")]
1239    pub uri: ::prost::alloc::string::String,
1240}
1241///
1242#[derive(Clone, PartialEq, ::prost::Message)]
1243pub struct Module {
1244    ///
1245    #[prost(string, tag = "1")]
1246    pub module_type: ::prost::alloc::string::String,
1247    ///
1248    #[prost(oneof = "module::ModuleItem", tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12")]
1249    pub module_item: ::core::option::Option<module::ModuleItem>,
1250}
1251/// Nested message and enum types in `Module`.
1252pub mod module {
1253    ///
1254    #[derive(Clone, PartialEq, ::prost::Oneof)]
1255    pub enum ModuleItem {
1256        ///
1257        #[prost(message, tag = "2")]
1258        ModuleFold(super::ModuleFold),
1259        ///
1260        #[prost(message, tag = "3")]
1261        ModuleAuthor(super::ModuleAuthor),
1262        ///
1263        #[prost(message, tag = "4")]
1264        ModuleDynamic(super::ModuleDynamic),
1265        ///
1266        #[prost(message, tag = "5")]
1267        ModuleState(super::ModuleState),
1268        ///
1269        #[prost(message, tag = "6")]
1270        ModuleForward(super::ModuleForward),
1271        ///
1272        #[prost(message, tag = "7")]
1273        ModuleExtend(super::ModuleExtend),
1274        ///
1275        #[prost(message, tag = "8")]
1276        ModuleDispute(super::ModuleDispute),
1277        ///
1278        #[prost(message, tag = "9")]
1279        ModuleDesc(super::ModuleDesc),
1280        ///
1281        #[prost(message, tag = "10")]
1282        ModuleLikeUser(super::ModuleLikeUser),
1283        ///
1284        #[prost(message, tag = "11")]
1285        ModuleUpList(super::ModuleDynUpList),
1286        ///
1287        #[prost(message, tag = "12")]
1288        ModuleFollowList(super::ModuleFollowList),
1289    }
1290}
1291///
1292#[derive(Clone, PartialEq, ::prost::Message)]
1293pub struct ModuleAuthor {
1294    ///
1295    #[prost(int64, tag = "1")]
1296    pub id: i64,
1297    ///
1298    #[prost(string, tag = "2")]
1299    pub ptime_label_text: ::prost::alloc::string::String,
1300    ///
1301    #[prost(message, optional, tag = "3")]
1302    pub author: ::core::option::Option<UserInfo>,
1303    ///
1304    #[prost(message, optional, tag = "4")]
1305    pub decorate_card: ::core::option::Option<DecorateCard>,
1306}
1307///
1308#[derive(Clone, PartialEq, ::prost::Message)]
1309pub struct ModuleDesc {
1310    ///
1311    #[prost(message, repeated, tag = "1")]
1312    pub desc: ::prost::alloc::vec::Vec<Description>,
1313}
1314///
1315#[derive(Clone, PartialEq, ::prost::Message)]
1316pub struct ModuleDispute {
1317    ///
1318    #[prost(string, tag = "1")]
1319    pub title: ::prost::alloc::string::String,
1320    ///
1321    #[prost(string, tag = "2")]
1322    pub desc: ::prost::alloc::string::String,
1323    ///
1324    #[prost(string, tag = "3")]
1325    pub uri: ::prost::alloc::string::String,
1326}
1327///
1328#[derive(Clone, PartialEq, ::prost::Message)]
1329pub struct ModuleDynUpList {
1330    ///
1331    #[prost(string, tag = "1")]
1332    pub module_title: ::prost::alloc::string::String,
1333    ///
1334    #[prost(string, tag = "2")]
1335    pub show_all: ::prost::alloc::string::String,
1336    ///
1337    #[prost(message, repeated, tag = "3")]
1338    pub list: ::prost::alloc::vec::Vec<UpListItem>,
1339}
1340///
1341#[derive(Clone, PartialEq, ::prost::Message)]
1342pub struct ModuleDynamic {
1343    ///
1344    #[prost(string, tag = "1")]
1345    pub card_type: ::prost::alloc::string::String,
1346    ///
1347    #[prost(oneof = "module_dynamic::Card", tags = "2, 3, 4, 5")]
1348    pub card: ::core::option::Option<module_dynamic::Card>,
1349}
1350/// Nested message and enum types in `ModuleDynamic`.
1351pub mod module_dynamic {
1352    ///
1353    #[derive(Clone, PartialEq, ::prost::Oneof)]
1354    pub enum Card {
1355        ///
1356        #[prost(message, tag = "2")]
1357        CardUgc(super::CardUgc),
1358        ///
1359        #[prost(message, tag = "3")]
1360        CardPgc(super::CardPgc),
1361        ///
1362        #[prost(message, tag = "4")]
1363        CardCurrSeason(super::CardCurrSeason),
1364        ///
1365        #[prost(message, tag = "5")]
1366        CardCurrBatch(super::CardCurrBatch),
1367    }
1368}
1369///
1370#[derive(Clone, PartialEq, ::prost::Message)]
1371pub struct ModuleExtend {
1372    ///
1373    #[prost(message, repeated, tag = "1")]
1374    pub extend: ::prost::alloc::vec::Vec<Extend>,
1375}
1376///
1377#[derive(Clone, PartialEq, ::prost::Message)]
1378pub struct ModuleFold {
1379    ///
1380    #[prost(enumeration = "FoldType", tag = "1")]
1381    pub fold_type: i32,
1382    ///
1383    #[prost(string, tag = "2")]
1384    pub text: ::prost::alloc::string::String,
1385    ///
1386    #[prost(string, tag = "3")]
1387    pub fold_ids: ::prost::alloc::string::String,
1388    ///
1389    #[prost(message, repeated, tag = "4")]
1390    pub fold_users: ::prost::alloc::vec::Vec<UserInfo>,
1391    ///
1392    #[prost(enumeration = "FoldType", tag = "5")]
1393    pub fold_type_v2: i32,
1394}
1395///
1396#[derive(Clone, PartialEq, ::prost::Message)]
1397pub struct ModuleFollowList {
1398    ///
1399    #[prost(string, tag = "1")]
1400    pub view_all_link: ::prost::alloc::string::String,
1401    ///
1402    #[prost(message, repeated, tag = "2")]
1403    pub list: ::prost::alloc::vec::Vec<FollowListItem>,
1404}
1405///
1406#[derive(Clone, PartialEq, ::prost::Message)]
1407pub struct ModuleForward {
1408    ///
1409    #[prost(string, tag = "1")]
1410    pub card_type: ::prost::alloc::string::String,
1411    ///
1412    #[prost(message, repeated, tag = "2")]
1413    pub modules: ::prost::alloc::vec::Vec<Module>,
1414}
1415///
1416#[derive(Clone, PartialEq, ::prost::Message)]
1417pub struct ModuleLikeUser {
1418    ///
1419    #[prost(message, repeated, tag = "1")]
1420    pub like_users: ::prost::alloc::vec::Vec<LikeUser>,
1421    ///
1422    #[prost(string, tag = "2")]
1423    pub display_text: ::prost::alloc::string::String,
1424}
1425///
1426#[derive(Clone, PartialEq, ::prost::Message)]
1427pub struct ModuleState {
1428    ///
1429    #[prost(int32, tag = "1")]
1430    pub repost: i32,
1431    ///
1432    #[prost(int32, tag = "2")]
1433    pub like: i32,
1434    ///
1435    #[prost(int32, tag = "3")]
1436    pub reply: i32,
1437    ///
1438    #[prost(message, optional, tag = "4")]
1439    pub like_info: ::core::option::Option<LikeInfo>,
1440    ///
1441    #[prost(bool, tag = "5")]
1442    pub no_comment: bool,
1443    ///
1444    #[prost(bool, tag = "6")]
1445    pub no_forward: bool,
1446}
1447///
1448#[derive(Clone, PartialEq, ::prost::Message)]
1449pub struct Nameplate {
1450    ///
1451    #[prost(int64, tag = "1")]
1452    pub nid: i64,
1453    ///
1454    #[prost(string, tag = "2")]
1455    pub name: ::prost::alloc::string::String,
1456    ///
1457    #[prost(string, tag = "3")]
1458    pub image: ::prost::alloc::string::String,
1459    ///
1460    #[prost(string, tag = "4")]
1461    pub image_small: ::prost::alloc::string::String,
1462    ///
1463    #[prost(string, tag = "5")]
1464    pub level: ::prost::alloc::string::String,
1465    ///
1466    #[prost(string, tag = "6")]
1467    pub condition: ::prost::alloc::string::String,
1468}
1469///
1470#[derive(Clone, PartialEq, ::prost::Message)]
1471pub struct NewEp {
1472    ///
1473    #[prost(int32, tag = "1")]
1474    pub id: i32,
1475    ///
1476    #[prost(string, tag = "2")]
1477    pub index_show: ::prost::alloc::string::String,
1478    ///
1479    #[prost(string, tag = "3")]
1480    pub cover: ::prost::alloc::string::String,
1481}
1482///
1483#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1484pub struct NoReply {}
1485///
1486#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1487pub struct NoReq {}
1488///
1489#[derive(Clone, PartialEq, ::prost::Message)]
1490pub struct OfficialVerify {
1491    ///
1492    #[prost(int32, tag = "1")]
1493    pub r#type: i32,
1494    ///
1495    #[prost(string, tag = "2")]
1496    pub desc: ::prost::alloc::string::String,
1497    ///
1498    #[prost(int32, tag = "3")]
1499    pub is_atten: i32,
1500}
1501///
1502#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1503pub struct OurCityClickReportReply {}
1504///
1505#[derive(Clone, PartialEq, ::prost::Message)]
1506pub struct OurCityClickReportReq {
1507    ///
1508    #[prost(string, tag = "1")]
1509    pub dynamic_id: ::prost::alloc::string::String,
1510    ///
1511    #[prost(int64, tag = "2")]
1512    pub city_id: i64,
1513    ///
1514    #[prost(double, tag = "3")]
1515    pub lat: f64,
1516    ///
1517    #[prost(double, tag = "4")]
1518    pub lng: f64,
1519}
1520///
1521#[derive(Clone, PartialEq, ::prost::Message)]
1522pub struct PgcSeason {
1523    ///
1524    #[prost(int32, tag = "1")]
1525    pub is_finish: i32,
1526    ///
1527    #[prost(string, tag = "2")]
1528    pub title: ::prost::alloc::string::String,
1529    ///
1530    #[prost(int32, tag = "3")]
1531    pub r#type: i32,
1532}
1533///
1534#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1535pub struct PlayerPreloadParams {
1536    ///
1537    #[prost(int32, tag = "1")]
1538    pub qn: i32,
1539    ///
1540    #[prost(int32, tag = "2")]
1541    pub fnver: i32,
1542    ///
1543    #[prost(int32, tag = "3")]
1544    pub fnval: i32,
1545    ///
1546    #[prost(int32, tag = "4")]
1547    pub force_host: i32,
1548    ///
1549    #[prost(int32, tag = "5")]
1550    pub fourk: i32,
1551}
1552///
1553#[derive(Clone, PartialEq, ::prost::Message)]
1554pub struct Popup {
1555    ///
1556    #[prost(string, tag = "1")]
1557    pub title: ::prost::alloc::string::String,
1558    ///
1559    #[prost(string, tag = "2")]
1560    pub desc: ::prost::alloc::string::String,
1561    ///
1562    #[prost(string, tag = "3")]
1563    pub uri: ::prost::alloc::string::String,
1564}
1565///
1566#[derive(Clone, PartialEq, ::prost::Message)]
1567pub struct Relation {
1568    ///
1569    #[prost(enumeration = "RelationStatus", tag = "1")]
1570    pub status: i32,
1571    ///
1572    #[prost(int32, tag = "2")]
1573    pub is_follow: i32,
1574    ///
1575    #[prost(int32, tag = "3")]
1576    pub is_followed: i32,
1577    ///
1578    #[prost(string, tag = "4")]
1579    pub title: ::prost::alloc::string::String,
1580}
1581///
1582#[derive(Clone, PartialEq, ::prost::Message)]
1583pub struct SVideoItem {
1584    ///
1585    #[prost(string, tag = "1")]
1586    pub card_type: ::prost::alloc::string::String,
1587    ///
1588    #[prost(message, repeated, tag = "2")]
1589    pub modules: ::prost::alloc::vec::Vec<SVideoModule>,
1590    ///
1591    #[prost(string, tag = "3")]
1592    pub dyn_id_str: ::prost::alloc::string::String,
1593    ///
1594    #[prost(int64, tag = "4")]
1595    pub index: i64,
1596}
1597///
1598#[derive(Clone, PartialEq, ::prost::Message)]
1599pub struct SVideoModule {
1600    ///
1601    #[prost(string, tag = "1")]
1602    pub module_type: ::prost::alloc::string::String,
1603    ///
1604    #[prost(oneof = "s_video_module::ModuleItem", tags = "2, 3, 4, 5")]
1605    pub module_item: ::core::option::Option<s_video_module::ModuleItem>,
1606}
1607/// Nested message and enum types in `SVideoModule`.
1608pub mod s_video_module {
1609    ///
1610    #[derive(Clone, PartialEq, ::prost::Oneof)]
1611    pub enum ModuleItem {
1612        ///
1613        #[prost(message, tag = "2")]
1614        ModuleAuthor(super::SVideoModuleAuthor),
1615        ///
1616        #[prost(message, tag = "3")]
1617        ModulePlayer(super::SVideoModulePlayer),
1618        ///
1619        #[prost(message, tag = "4")]
1620        ModuleDesc(super::SVideoModuleDesc),
1621        ///
1622        #[prost(message, tag = "5")]
1623        ModuleStat(super::SVideoModuleStat),
1624    }
1625}
1626///
1627#[derive(Clone, PartialEq, ::prost::Message)]
1628pub struct SVideoModuleAuthor {
1629    ///
1630    #[prost(int64, tag = "1")]
1631    pub mid: i64,
1632    ///
1633    #[prost(string, tag = "2")]
1634    pub name: ::prost::alloc::string::String,
1635    ///
1636    #[prost(string, tag = "3")]
1637    pub face: ::prost::alloc::string::String,
1638    ///
1639    #[prost(string, tag = "4")]
1640    pub pub_desc: ::prost::alloc::string::String,
1641    ///
1642    #[prost(int32, tag = "5")]
1643    pub is_attention: i32,
1644    ///
1645    #[prost(string, tag = "6")]
1646    pub uri: ::prost::alloc::string::String,
1647}
1648///
1649#[derive(Clone, PartialEq, ::prost::Message)]
1650pub struct SVideoModuleDesc {
1651    ///
1652    #[prost(string, tag = "1")]
1653    pub text: ::prost::alloc::string::String,
1654    ///
1655    #[prost(string, tag = "2")]
1656    pub uri: ::prost::alloc::string::String,
1657}
1658///
1659#[derive(Clone, PartialEq, ::prost::Message)]
1660pub struct SVideoModulePlayer {
1661    ///
1662    #[prost(string, tag = "1")]
1663    pub title: ::prost::alloc::string::String,
1664    ///
1665    #[prost(string, tag = "2")]
1666    pub cover: ::prost::alloc::string::String,
1667    ///
1668    #[prost(string, tag = "3")]
1669    pub uri: ::prost::alloc::string::String,
1670    ///
1671    #[prost(int64, tag = "4")]
1672    pub aid: i64,
1673    ///
1674    #[prost(int64, tag = "5")]
1675    pub cid: i64,
1676    ///
1677    #[prost(int64, tag = "6")]
1678    pub duration: i64,
1679    ///
1680    #[prost(message, optional, tag = "7")]
1681    pub dimension: ::core::option::Option<Dimension>,
1682}
1683///
1684#[derive(Clone, PartialEq, ::prost::Message)]
1685pub struct SVideoModuleStat {
1686    ///
1687    #[prost(message, repeated, tag = "1")]
1688    pub stat_info: ::prost::alloc::vec::Vec<SVideoStatInfo>,
1689    ///
1690    #[prost(message, optional, tag = "2")]
1691    pub share_info: ::core::option::Option<ShareInfo>,
1692}
1693///
1694#[derive(Clone, PartialEq, ::prost::Message)]
1695pub struct SVideoReply {
1696    ///
1697    #[prost(message, repeated, tag = "1")]
1698    pub list: ::prost::alloc::vec::Vec<SVideoItem>,
1699    ///
1700    #[prost(string, tag = "2")]
1701    pub offset: ::prost::alloc::string::String,
1702    ///
1703    #[prost(int32, tag = "3")]
1704    pub has_more: i32,
1705    ///
1706    #[prost(message, optional, tag = "4")]
1707    pub top: ::core::option::Option<SVideoTop>,
1708}
1709///
1710#[derive(Clone, PartialEq, ::prost::Message)]
1711pub struct SVideoReq {
1712    ///
1713    #[prost(int64, tag = "1")]
1714    pub oid: i64,
1715    ///
1716    #[prost(enumeration = "SVideoType", tag = "2")]
1717    pub r#type: i32,
1718    ///
1719    #[prost(string, tag = "3")]
1720    pub offset: ::prost::alloc::string::String,
1721    ///
1722    #[prost(int32, tag = "4")]
1723    pub qn: i32,
1724    ///
1725    #[prost(int32, tag = "5")]
1726    pub fnver: i32,
1727    ///
1728    #[prost(int32, tag = "6")]
1729    pub fnval: i32,
1730    ///
1731    #[prost(int32, tag = "7")]
1732    pub force_host: i32,
1733    ///
1734    #[prost(int32, tag = "8")]
1735    pub fourk: i32,
1736    ///
1737    #[prost(string, tag = "9")]
1738    pub spmid: ::prost::alloc::string::String,
1739    ///
1740    #[prost(string, tag = "10")]
1741    pub from_spmid: ::prost::alloc::string::String,
1742    ///
1743    #[prost(message, optional, tag = "11")]
1744    pub player_preload: ::core::option::Option<PlayerPreloadParams>,
1745    ///
1746    #[prost(int64, tag = "12")]
1747    pub focus_aid: i64,
1748    ///
1749    #[prost(message, optional, tag = "13")]
1750    pub player_args: ::core::option::Option<
1751        super::super::archive::middleware::v1::PlayerArgs,
1752    >,
1753}
1754///
1755#[derive(Clone, PartialEq, ::prost::Message)]
1756pub struct SVideoStatInfo {
1757    ///
1758    #[prost(int32, tag = "1")]
1759    pub icon: i32,
1760    ///
1761    #[prost(int64, tag = "2")]
1762    pub num: i64,
1763    ///
1764    #[prost(int32, tag = "3")]
1765    pub selected: i32,
1766    ///
1767    #[prost(string, tag = "4")]
1768    pub uri: ::prost::alloc::string::String,
1769}
1770///
1771#[derive(Clone, PartialEq, ::prost::Message)]
1772pub struct SVideoTop {
1773    ///
1774    #[prost(string, tag = "1")]
1775    pub title: ::prost::alloc::string::String,
1776    ///
1777    #[prost(string, tag = "2")]
1778    pub desc: ::prost::alloc::string::String,
1779}
1780///
1781#[derive(Clone, PartialEq, ::prost::Message)]
1782pub struct ShareInfo {
1783    ///
1784    #[prost(int64, tag = "1")]
1785    pub aid: i64,
1786    ///
1787    #[prost(string, tag = "2")]
1788    pub bvid: ::prost::alloc::string::String,
1789    ///
1790    #[prost(string, tag = "3")]
1791    pub title: ::prost::alloc::string::String,
1792    ///
1793    #[prost(string, tag = "4")]
1794    pub subtitle: ::prost::alloc::string::String,
1795    ///
1796    #[prost(string, tag = "5")]
1797    pub cover: ::prost::alloc::string::String,
1798    ///
1799    #[prost(int64, tag = "6")]
1800    pub mid: i64,
1801    ///
1802    #[prost(string, tag = "7")]
1803    pub name: ::prost::alloc::string::String,
1804}
1805///
1806#[derive(Clone, PartialEq, ::prost::Message)]
1807pub struct TabOffset {
1808    ///
1809    #[prost(int32, tag = "1")]
1810    pub tab: i32,
1811    ///
1812    #[prost(string, tag = "2")]
1813    pub offset: ::prost::alloc::string::String,
1814}
1815///
1816#[derive(Clone, PartialEq, ::prost::Message)]
1817pub struct UpListItem {
1818    ///
1819    #[prost(int32, tag = "1")]
1820    pub has_update: i32,
1821    ///
1822    #[prost(string, tag = "2")]
1823    pub face: ::prost::alloc::string::String,
1824    ///
1825    #[prost(string, tag = "3")]
1826    pub name: ::prost::alloc::string::String,
1827    ///
1828    #[prost(int64, tag = "4")]
1829    pub uid: i64,
1830}
1831///
1832#[derive(Clone, PartialEq, ::prost::Message)]
1833pub struct UserInfo {
1834    ///
1835    #[prost(int64, tag = "1")]
1836    pub mid: i64,
1837    ///
1838    #[prost(string, tag = "2")]
1839    pub name: ::prost::alloc::string::String,
1840    ///
1841    #[prost(string, tag = "3")]
1842    pub face: ::prost::alloc::string::String,
1843    ///
1844    #[prost(message, optional, tag = "4")]
1845    pub official: ::core::option::Option<OfficialVerify>,
1846    ///
1847    #[prost(message, optional, tag = "5")]
1848    pub vip: ::core::option::Option<VipInfo>,
1849    ///
1850    #[prost(message, optional, tag = "6")]
1851    pub live: ::core::option::Option<LiveInfo>,
1852    ///
1853    #[prost(string, tag = "7")]
1854    pub uri: ::prost::alloc::string::String,
1855    ///
1856    #[prost(message, optional, tag = "8")]
1857    pub pendant: ::core::option::Option<UserPendant>,
1858    ///
1859    #[prost(message, optional, tag = "9")]
1860    pub nameplate: ::core::option::Option<Nameplate>,
1861}
1862///
1863#[derive(Clone, PartialEq, ::prost::Message)]
1864pub struct UserPendant {
1865    ///
1866    #[prost(int64, tag = "1")]
1867    pub pid: i64,
1868    ///
1869    #[prost(string, tag = "2")]
1870    pub name: ::prost::alloc::string::String,
1871    ///
1872    #[prost(string, tag = "3")]
1873    pub image: ::prost::alloc::string::String,
1874    ///
1875    #[prost(int64, tag = "4")]
1876    pub expire: i64,
1877}
1878///
1879#[derive(Clone, PartialEq, ::prost::Message)]
1880pub struct VideoBadge {
1881    ///
1882    #[prost(string, tag = "1")]
1883    pub text: ::prost::alloc::string::String,
1884    ///
1885    #[prost(string, tag = "2")]
1886    pub text_color: ::prost::alloc::string::String,
1887    ///
1888    #[prost(string, tag = "3")]
1889    pub text_color_night: ::prost::alloc::string::String,
1890    ///
1891    #[prost(string, tag = "4")]
1892    pub bg_color: ::prost::alloc::string::String,
1893    ///
1894    #[prost(string, tag = "5")]
1895    pub bg_color_night: ::prost::alloc::string::String,
1896    ///
1897    #[prost(string, tag = "6")]
1898    pub border_color: ::prost::alloc::string::String,
1899    ///
1900    #[prost(string, tag = "7")]
1901    pub border_color_night: ::prost::alloc::string::String,
1902    ///
1903    #[prost(int32, tag = "8")]
1904    pub bg_style: i32,
1905}
1906///
1907#[derive(Clone, PartialEq, ::prost::Message)]
1908pub struct VipInfo {
1909    ///
1910    #[prost(int32, tag = "1")]
1911    pub r#type: i32,
1912    ///
1913    #[prost(int32, tag = "2")]
1914    pub status: i32,
1915    ///
1916    #[prost(int64, tag = "3")]
1917    pub due_date: i64,
1918    ///
1919    #[prost(message, optional, tag = "4")]
1920    pub label: ::core::option::Option<VipLabel>,
1921    ///
1922    #[prost(int32, tag = "5")]
1923    pub theme_type: i32,
1924}
1925///
1926#[derive(Clone, PartialEq, ::prost::Message)]
1927pub struct VipLabel {
1928    ///
1929    #[prost(string, tag = "1")]
1930    pub path: ::prost::alloc::string::String,
1931}
1932///
1933#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1934#[repr(i32)]
1935pub enum BgType {
1936    ///
1937    Default = 0,
1938    ///
1939    Face = 1,
1940}
1941impl BgType {
1942    /// String value of the enum field names used in the ProtoBuf definition.
1943    ///
1944    /// The values are not transformed in any way and thus are considered stable
1945    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1946    pub fn as_str_name(&self) -> &'static str {
1947        match self {
1948            Self::Default => "bg_type_default",
1949            Self::Face => "bg_type_face",
1950        }
1951    }
1952    /// Creates an enum from field names used in the ProtoBuf definition.
1953    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1954        match value {
1955            "bg_type_default" => Some(Self::Default),
1956            "bg_type_face" => Some(Self::Face),
1957            _ => None,
1958        }
1959    }
1960}
1961///
1962#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1963#[repr(i32)]
1964pub enum BubbleModuleType {
1965    ///
1966    BubbleModuleNone = 0,
1967    ///
1968    BubbleModuleUser = 1,
1969    ///
1970    BubbleModuleText = 2,
1971    ///
1972    BubbleModuleColoredTip = 3,
1973    ///
1974    BubbleModulePic = 4,
1975}
1976impl BubbleModuleType {
1977    /// String value of the enum field names used in the ProtoBuf definition.
1978    ///
1979    /// The values are not transformed in any way and thus are considered stable
1980    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1981    pub fn as_str_name(&self) -> &'static str {
1982        match self {
1983            Self::BubbleModuleNone => "BUBBLE_MODULE_NONE",
1984            Self::BubbleModuleUser => "BUBBLE_MODULE_USER",
1985            Self::BubbleModuleText => "BUBBLE_MODULE_TEXT",
1986            Self::BubbleModuleColoredTip => "BUBBLE_MODULE_COLORED_TIP",
1987            Self::BubbleModulePic => "BUBBLE_MODULE_PIC",
1988        }
1989    }
1990    /// Creates an enum from field names used in the ProtoBuf definition.
1991    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1992        match value {
1993            "BUBBLE_MODULE_NONE" => Some(Self::BubbleModuleNone),
1994            "BUBBLE_MODULE_USER" => Some(Self::BubbleModuleUser),
1995            "BUBBLE_MODULE_TEXT" => Some(Self::BubbleModuleText),
1996            "BUBBLE_MODULE_COLORED_TIP" => Some(Self::BubbleModuleColoredTip),
1997            "BUBBLE_MODULE_PIC" => Some(Self::BubbleModulePic),
1998            _ => None,
1999        }
2000    }
2001}
2002///
2003#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2004#[repr(i32)]
2005pub enum CornerType {
2006    ///
2007    None = 0,
2008    ///
2009    Text = 1,
2010    ///
2011    Animation = 2,
2012    ///
2013    Static = 3,
2014    ///
2015    RedDot = 4,
2016    ///
2017    Number = 5,
2018}
2019impl CornerType {
2020    /// String value of the enum field names used in the ProtoBuf definition.
2021    ///
2022    /// The values are not transformed in any way and thus are considered stable
2023    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2024    pub fn as_str_name(&self) -> &'static str {
2025        match self {
2026            Self::None => "corner_type_none",
2027            Self::Text => "corner_type_text",
2028            Self::Animation => "corner_type_animation",
2029            Self::Static => "corner_type_static",
2030            Self::RedDot => "corner_type_red_dot",
2031            Self::Number => "corner_type_number",
2032        }
2033    }
2034    /// Creates an enum from field names used in the ProtoBuf definition.
2035    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2036        match value {
2037            "corner_type_none" => Some(Self::None),
2038            "corner_type_text" => Some(Self::Text),
2039            "corner_type_animation" => Some(Self::Animation),
2040            "corner_type_static" => Some(Self::Static),
2041            "corner_type_red_dot" => Some(Self::RedDot),
2042            "corner_type_number" => Some(Self::Number),
2043            _ => None,
2044        }
2045    }
2046}
2047///
2048#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2049#[repr(i32)]
2050pub enum FoldType {
2051    ///
2052    Zero = 0,
2053    ///
2054    Publish = 1,
2055    ///
2056    Frequent = 2,
2057    ///
2058    Unite = 3,
2059    ///
2060    Limit = 4,
2061}
2062impl FoldType {
2063    /// String value of the enum field names used in the ProtoBuf definition.
2064    ///
2065    /// The values are not transformed in any way and thus are considered stable
2066    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2067    pub fn as_str_name(&self) -> &'static str {
2068        match self {
2069            Self::Zero => "FoldTypeZero",
2070            Self::Publish => "FoldTypePublish",
2071            Self::Frequent => "FoldTypeFrequent",
2072            Self::Unite => "FoldTypeUnite",
2073            Self::Limit => "FoldTypeLimit",
2074        }
2075    }
2076    /// Creates an enum from field names used in the ProtoBuf definition.
2077    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2078        match value {
2079            "FoldTypeZero" => Some(Self::Zero),
2080            "FoldTypePublish" => Some(Self::Publish),
2081            "FoldTypeFrequent" => Some(Self::Frequent),
2082            "FoldTypeUnite" => Some(Self::Unite),
2083            "FoldTypeLimit" => Some(Self::Limit),
2084            _ => None,
2085        }
2086    }
2087}
2088///
2089#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2090#[repr(i32)]
2091pub enum MediaType {
2092    ///
2093    None = 0,
2094    ///
2095    Ugc = 1,
2096    ///
2097    Pgc = 2,
2098    ///
2099    Live = 3,
2100    ///
2101    Vcs = 4,
2102}
2103impl MediaType {
2104    /// String value of the enum field names used in the ProtoBuf definition.
2105    ///
2106    /// The values are not transformed in any way and thus are considered stable
2107    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2108    pub fn as_str_name(&self) -> &'static str {
2109        match self {
2110            Self::None => "MediaTypeNone",
2111            Self::Ugc => "MediaTypeUGC",
2112            Self::Pgc => "MediaTypePGC",
2113            Self::Live => "MediaTypeLive",
2114            Self::Vcs => "MediaTypeVCS",
2115        }
2116    }
2117    /// Creates an enum from field names used in the ProtoBuf definition.
2118    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2119        match value {
2120            "MediaTypeNone" => Some(Self::None),
2121            "MediaTypeUGC" => Some(Self::Ugc),
2122            "MediaTypePGC" => Some(Self::Pgc),
2123            "MediaTypeLive" => Some(Self::Live),
2124            "MediaTypeVCS" => Some(Self::Vcs),
2125            _ => None,
2126        }
2127    }
2128}
2129///
2130#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2131#[repr(i32)]
2132pub enum RelationStatus {
2133    ///
2134    None = 0,
2135    ///
2136    Nofollow = 1,
2137    ///
2138    Follow = 2,
2139    ///
2140    Followed = 3,
2141    ///
2142    MutualConcern = 4,
2143    ///
2144    Special = 5,
2145}
2146impl RelationStatus {
2147    /// String value of the enum field names used in the ProtoBuf definition.
2148    ///
2149    /// The values are not transformed in any way and thus are considered stable
2150    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2151    pub fn as_str_name(&self) -> &'static str {
2152        match self {
2153            Self::None => "relation_status_none",
2154            Self::Nofollow => "relation_status_nofollow",
2155            Self::Follow => "relation_status_follow",
2156            Self::Followed => "relation_status_followed",
2157            Self::MutualConcern => "relation_status_mutual_concern",
2158            Self::Special => "relation_status_special",
2159        }
2160    }
2161    /// Creates an enum from field names used in the ProtoBuf definition.
2162    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2163        match value {
2164            "relation_status_none" => Some(Self::None),
2165            "relation_status_nofollow" => Some(Self::Nofollow),
2166            "relation_status_follow" => Some(Self::Follow),
2167            "relation_status_followed" => Some(Self::Followed),
2168            "relation_status_mutual_concern" => Some(Self::MutualConcern),
2169            "relation_status_special" => Some(Self::Special),
2170            _ => None,
2171        }
2172    }
2173}
2174///
2175#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2176#[repr(i32)]
2177pub enum SVideoType {
2178    ///
2179    TypeNone = 0,
2180    ///
2181    TypeDynamic = 1,
2182    ///
2183    TypePopularIndex = 2,
2184    ///
2185    TypePopularHotword = 3,
2186}
2187impl SVideoType {
2188    /// String value of the enum field names used in the ProtoBuf definition.
2189    ///
2190    /// The values are not transformed in any way and thus are considered stable
2191    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2192    pub fn as_str_name(&self) -> &'static str {
2193        match self {
2194            Self::TypeNone => "TypeNone",
2195            Self::TypeDynamic => "TypeDynamic",
2196            Self::TypePopularIndex => "TypePopularIndex",
2197            Self::TypePopularHotword => "TypePopularHotword",
2198        }
2199    }
2200    /// Creates an enum from field names used in the ProtoBuf definition.
2201    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2202        match value {
2203            "TypeNone" => Some(Self::TypeNone),
2204            "TypeDynamic" => Some(Self::TypeDynamic),
2205            "TypePopularIndex" => Some(Self::TypePopularIndex),
2206            "TypePopularHotword" => Some(Self::TypePopularHotword),
2207            _ => None,
2208        }
2209    }
2210}
2211///
2212#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2213#[repr(i32)]
2214pub enum StyleType {
2215    ///
2216    None = 0,
2217    ///
2218    Live = 1,
2219    ///
2220    DynUp = 2,
2221    ///
2222    OgvUp = 3,
2223    ///
2224    CollectionUp = 4,
2225}
2226impl StyleType {
2227    /// String value of the enum field names used in the ProtoBuf definition.
2228    ///
2229    /// The values are not transformed in any way and thus are considered stable
2230    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2231    pub fn as_str_name(&self) -> &'static str {
2232        match self {
2233            Self::None => "STYLE_TYPE_NONE",
2234            Self::Live => "STYLE_TYPE_LIVE",
2235            Self::DynUp => "STYLE_TYPE_DYN_UP",
2236            Self::OgvUp => "STYLE_TYPE_OGV_UP",
2237            Self::CollectionUp => "STYLE_TYPE_COLLECTION_UP",
2238        }
2239    }
2240    /// Creates an enum from field names used in the ProtoBuf definition.
2241    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2242        match value {
2243            "STYLE_TYPE_NONE" => Some(Self::None),
2244            "STYLE_TYPE_LIVE" => Some(Self::Live),
2245            "STYLE_TYPE_DYN_UP" => Some(Self::DynUp),
2246            "STYLE_TYPE_OGV_UP" => Some(Self::OgvUp),
2247            "STYLE_TYPE_COLLECTION_UP" => Some(Self::CollectionUp),
2248            _ => None,
2249        }
2250    }
2251}
2252///
2253#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2254#[repr(i32)]
2255pub enum VideoSubType {
2256    ///
2257    None = 0,
2258    ///
2259    Bangumi = 1,
2260    ///
2261    Movie = 2,
2262    ///
2263    Documentary = 3,
2264    ///
2265    Domestic = 4,
2266    ///
2267    Teleplay = 5,
2268}
2269impl VideoSubType {
2270    /// String value of the enum field names used in the ProtoBuf definition.
2271    ///
2272    /// The values are not transformed in any way and thus are considered stable
2273    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2274    pub fn as_str_name(&self) -> &'static str {
2275        match self {
2276            Self::None => "VideoSubTypeNone",
2277            Self::Bangumi => "VideoSubTypeBangumi",
2278            Self::Movie => "VideoSubTypeMovie",
2279            Self::Documentary => "VideoSubTypeDocumentary",
2280            Self::Domestic => "VideoSubTypeDomestic",
2281            Self::Teleplay => "VideoSubTypeTeleplay",
2282        }
2283    }
2284    /// Creates an enum from field names used in the ProtoBuf definition.
2285    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2286        match value {
2287            "VideoSubTypeNone" => Some(Self::None),
2288            "VideoSubTypeBangumi" => Some(Self::Bangumi),
2289            "VideoSubTypeMovie" => Some(Self::Movie),
2290            "VideoSubTypeDocumentary" => Some(Self::Documentary),
2291            "VideoSubTypeDomestic" => Some(Self::Domestic),
2292            "VideoSubTypeTeleplay" => Some(Self::Teleplay),
2293            _ => None,
2294        }
2295    }
2296}
2297/// Generated client implementations.
2298pub mod dynamic_client {
2299    #![allow(
2300        unused_variables,
2301        dead_code,
2302        missing_docs,
2303        clippy::wildcard_imports,
2304        clippy::let_unit_value,
2305    )]
2306    use tonic::codegen::*;
2307    use tonic::codegen::http::Uri;
2308    ///
2309    #[derive(Debug, Clone)]
2310    pub struct DynamicClient<T> {
2311        inner: tonic::client::Grpc<T>,
2312    }
2313    impl<T> DynamicClient<T>
2314    where
2315        T: tonic::client::GrpcService<tonic::body::BoxBody>,
2316        T::Error: Into<StdError>,
2317        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
2318        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
2319    {
2320        pub fn new(inner: T) -> Self {
2321            let inner = tonic::client::Grpc::new(inner);
2322            Self { inner }
2323        }
2324        pub fn with_origin(inner: T, origin: Uri) -> Self {
2325            let inner = tonic::client::Grpc::with_origin(inner, origin);
2326            Self { inner }
2327        }
2328        pub fn with_interceptor<F>(
2329            inner: T,
2330            interceptor: F,
2331        ) -> DynamicClient<InterceptedService<T, F>>
2332        where
2333            F: tonic::service::Interceptor,
2334            T::ResponseBody: Default,
2335            T: tonic::codegen::Service<
2336                http::Request<tonic::body::BoxBody>,
2337                Response = http::Response<
2338                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
2339                >,
2340            >,
2341            <T as tonic::codegen::Service<
2342                http::Request<tonic::body::BoxBody>,
2343            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
2344        {
2345            DynamicClient::new(InterceptedService::new(inner, interceptor))
2346        }
2347        /// Compress requests with the given encoding.
2348        ///
2349        /// This requires the server to support it otherwise it might respond with an
2350        /// error.
2351        #[must_use]
2352        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2353            self.inner = self.inner.send_compressed(encoding);
2354            self
2355        }
2356        /// Enable decompressing responses.
2357        #[must_use]
2358        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2359            self.inner = self.inner.accept_compressed(encoding);
2360            self
2361        }
2362        /// Limits the maximum size of a decoded message.
2363        ///
2364        /// Default: `4MB`
2365        #[must_use]
2366        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2367            self.inner = self.inner.max_decoding_message_size(limit);
2368            self
2369        }
2370        /// Limits the maximum size of an encoded message.
2371        ///
2372        /// Default: `usize::MAX`
2373        #[must_use]
2374        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2375            self.inner = self.inner.max_encoding_message_size(limit);
2376            self
2377        }
2378        ///
2379        pub async fn dyn_details(
2380            &mut self,
2381            request: impl tonic::IntoRequest<super::DynDetailsReq>,
2382        ) -> std::result::Result<
2383            tonic::Response<super::DynDetailsReply>,
2384            tonic::Status,
2385        > {
2386            self.inner
2387                .ready()
2388                .await
2389                .map_err(|e| {
2390                    tonic::Status::unknown(
2391                        format!("Service was not ready: {}", e.into()),
2392                    )
2393                })?;
2394            let codec = tonic::codec::ProstCodec::default();
2395            let path = http::uri::PathAndQuery::from_static(
2396                "/bilibili.app.dynamic.v1.Dynamic/DynDetails",
2397            );
2398            let mut req = request.into_request();
2399            req.extensions_mut()
2400                .insert(
2401                    GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "DynDetails"),
2402                );
2403            self.inner.unary(req, path, codec).await
2404        }
2405        ///
2406        pub async fn dyn_mix_up_list_search(
2407            &mut self,
2408            request: impl tonic::IntoRequest<super::DynMixUpListSearchReq>,
2409        ) -> std::result::Result<
2410            tonic::Response<super::DynMixUpListSearchReply>,
2411            tonic::Status,
2412        > {
2413            self.inner
2414                .ready()
2415                .await
2416                .map_err(|e| {
2417                    tonic::Status::unknown(
2418                        format!("Service was not ready: {}", e.into()),
2419                    )
2420                })?;
2421            let codec = tonic::codec::ProstCodec::default();
2422            let path = http::uri::PathAndQuery::from_static(
2423                "/bilibili.app.dynamic.v1.Dynamic/DynMixUpListSearch",
2424            );
2425            let mut req = request.into_request();
2426            req.extensions_mut()
2427                .insert(
2428                    GrpcMethod::new(
2429                        "bilibili.app.dynamic.v1.Dynamic",
2430                        "DynMixUpListSearch",
2431                    ),
2432                );
2433            self.inner.unary(req, path, codec).await
2434        }
2435        ///
2436        pub async fn dyn_mix_up_list_view_more(
2437            &mut self,
2438            request: impl tonic::IntoRequest<super::NoReq>,
2439        ) -> std::result::Result<
2440            tonic::Response<super::DynMixUpListViewMoreReply>,
2441            tonic::Status,
2442        > {
2443            self.inner
2444                .ready()
2445                .await
2446                .map_err(|e| {
2447                    tonic::Status::unknown(
2448                        format!("Service was not ready: {}", e.into()),
2449                    )
2450                })?;
2451            let codec = tonic::codec::ProstCodec::default();
2452            let path = http::uri::PathAndQuery::from_static(
2453                "/bilibili.app.dynamic.v1.Dynamic/DynMixUpListViewMore",
2454            );
2455            let mut req = request.into_request();
2456            req.extensions_mut()
2457                .insert(
2458                    GrpcMethod::new(
2459                        "bilibili.app.dynamic.v1.Dynamic",
2460                        "DynMixUpListViewMore",
2461                    ),
2462                );
2463            self.inner.unary(req, path, codec).await
2464        }
2465        ///
2466        pub async fn dyn_our_city(
2467            &mut self,
2468            request: impl tonic::IntoRequest<super::DynOurCityReq>,
2469        ) -> std::result::Result<
2470            tonic::Response<super::DynOurCityReply>,
2471            tonic::Status,
2472        > {
2473            self.inner
2474                .ready()
2475                .await
2476                .map_err(|e| {
2477                    tonic::Status::unknown(
2478                        format!("Service was not ready: {}", e.into()),
2479                    )
2480                })?;
2481            let codec = tonic::codec::ProstCodec::default();
2482            let path = http::uri::PathAndQuery::from_static(
2483                "/bilibili.app.dynamic.v1.Dynamic/DynOurCity",
2484            );
2485            let mut req = request.into_request();
2486            req.extensions_mut()
2487                .insert(
2488                    GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "DynOurCity"),
2489                );
2490            self.inner.unary(req, path, codec).await
2491        }
2492        ///
2493        pub async fn dyn_our_city_switch(
2494            &mut self,
2495            request: impl tonic::IntoRequest<super::DynOurCitySwitchReq>,
2496        ) -> std::result::Result<tonic::Response<super::NoReply>, tonic::Status> {
2497            self.inner
2498                .ready()
2499                .await
2500                .map_err(|e| {
2501                    tonic::Status::unknown(
2502                        format!("Service was not ready: {}", e.into()),
2503                    )
2504                })?;
2505            let codec = tonic::codec::ProstCodec::default();
2506            let path = http::uri::PathAndQuery::from_static(
2507                "/bilibili.app.dynamic.v1.Dynamic/DynOurCitySwitch",
2508            );
2509            let mut req = request.into_request();
2510            req.extensions_mut()
2511                .insert(
2512                    GrpcMethod::new(
2513                        "bilibili.app.dynamic.v1.Dynamic",
2514                        "DynOurCitySwitch",
2515                    ),
2516                );
2517            self.inner.unary(req, path, codec).await
2518        }
2519        ///
2520        pub async fn dyn_red(
2521            &mut self,
2522            request: impl tonic::IntoRequest<super::DynRedReq>,
2523        ) -> std::result::Result<tonic::Response<super::DynRedReply>, tonic::Status> {
2524            self.inner
2525                .ready()
2526                .await
2527                .map_err(|e| {
2528                    tonic::Status::unknown(
2529                        format!("Service was not ready: {}", e.into()),
2530                    )
2531                })?;
2532            let codec = tonic::codec::ProstCodec::default();
2533            let path = http::uri::PathAndQuery::from_static(
2534                "/bilibili.app.dynamic.v1.Dynamic/DynRed",
2535            );
2536            let mut req = request.into_request();
2537            req.extensions_mut()
2538                .insert(GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "DynRed"));
2539            self.inner.unary(req, path, codec).await
2540        }
2541        ///
2542        pub async fn dyn_tab(
2543            &mut self,
2544            request: impl tonic::IntoRequest<super::DynTabReq>,
2545        ) -> std::result::Result<tonic::Response<super::DynTabReply>, tonic::Status> {
2546            self.inner
2547                .ready()
2548                .await
2549                .map_err(|e| {
2550                    tonic::Status::unknown(
2551                        format!("Service was not ready: {}", e.into()),
2552                    )
2553                })?;
2554            let codec = tonic::codec::ProstCodec::default();
2555            let path = http::uri::PathAndQuery::from_static(
2556                "/bilibili.app.dynamic.v1.Dynamic/DynTab",
2557            );
2558            let mut req = request.into_request();
2559            req.extensions_mut()
2560                .insert(GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "DynTab"));
2561            self.inner.unary(req, path, codec).await
2562        }
2563        ///
2564        pub async fn dyn_upd_offset(
2565            &mut self,
2566            request: impl tonic::IntoRequest<super::DynUpdOffsetReq>,
2567        ) -> std::result::Result<tonic::Response<super::NoReply>, tonic::Status> {
2568            self.inner
2569                .ready()
2570                .await
2571                .map_err(|e| {
2572                    tonic::Status::unknown(
2573                        format!("Service was not ready: {}", e.into()),
2574                    )
2575                })?;
2576            let codec = tonic::codec::ProstCodec::default();
2577            let path = http::uri::PathAndQuery::from_static(
2578                "/bilibili.app.dynamic.v1.Dynamic/DynUpdOffset",
2579            );
2580            let mut req = request.into_request();
2581            req.extensions_mut()
2582                .insert(
2583                    GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "DynUpdOffset"),
2584                );
2585            self.inner.unary(req, path, codec).await
2586        }
2587        ///
2588        pub async fn dyn_video(
2589            &mut self,
2590            request: impl tonic::IntoRequest<super::DynVideoReq>,
2591        ) -> std::result::Result<
2592            tonic::Response<super::DynVideoReqReply>,
2593            tonic::Status,
2594        > {
2595            self.inner
2596                .ready()
2597                .await
2598                .map_err(|e| {
2599                    tonic::Status::unknown(
2600                        format!("Service was not ready: {}", e.into()),
2601                    )
2602                })?;
2603            let codec = tonic::codec::ProstCodec::default();
2604            let path = http::uri::PathAndQuery::from_static(
2605                "/bilibili.app.dynamic.v1.Dynamic/DynVideo",
2606            );
2607            let mut req = request.into_request();
2608            req.extensions_mut()
2609                .insert(GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "DynVideo"));
2610            self.inner.unary(req, path, codec).await
2611        }
2612        ///
2613        pub async fn dyn_video_personal(
2614            &mut self,
2615            request: impl tonic::IntoRequest<super::DynVideoPersonalReq>,
2616        ) -> std::result::Result<
2617            tonic::Response<super::DynVideoPersonalReply>,
2618            tonic::Status,
2619        > {
2620            self.inner
2621                .ready()
2622                .await
2623                .map_err(|e| {
2624                    tonic::Status::unknown(
2625                        format!("Service was not ready: {}", e.into()),
2626                    )
2627                })?;
2628            let codec = tonic::codec::ProstCodec::default();
2629            let path = http::uri::PathAndQuery::from_static(
2630                "/bilibili.app.dynamic.v1.Dynamic/DynVideoPersonal",
2631            );
2632            let mut req = request.into_request();
2633            req.extensions_mut()
2634                .insert(
2635                    GrpcMethod::new(
2636                        "bilibili.app.dynamic.v1.Dynamic",
2637                        "DynVideoPersonal",
2638                    ),
2639                );
2640            self.inner.unary(req, path, codec).await
2641        }
2642        ///
2643        pub async fn geo_coder(
2644            &mut self,
2645            request: impl tonic::IntoRequest<super::GeoCoderReq>,
2646        ) -> std::result::Result<tonic::Response<super::GeoCoderReply>, tonic::Status> {
2647            self.inner
2648                .ready()
2649                .await
2650                .map_err(|e| {
2651                    tonic::Status::unknown(
2652                        format!("Service was not ready: {}", e.into()),
2653                    )
2654                })?;
2655            let codec = tonic::codec::ProstCodec::default();
2656            let path = http::uri::PathAndQuery::from_static(
2657                "/bilibili.app.dynamic.v1.Dynamic/GeoCoder",
2658            );
2659            let mut req = request.into_request();
2660            req.extensions_mut()
2661                .insert(GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "GeoCoder"));
2662            self.inner.unary(req, path, codec).await
2663        }
2664        ///
2665        pub async fn our_city_click_report(
2666            &mut self,
2667            request: impl tonic::IntoRequest<super::OurCityClickReportReq>,
2668        ) -> std::result::Result<
2669            tonic::Response<super::OurCityClickReportReply>,
2670            tonic::Status,
2671        > {
2672            self.inner
2673                .ready()
2674                .await
2675                .map_err(|e| {
2676                    tonic::Status::unknown(
2677                        format!("Service was not ready: {}", e.into()),
2678                    )
2679                })?;
2680            let codec = tonic::codec::ProstCodec::default();
2681            let path = http::uri::PathAndQuery::from_static(
2682                "/bilibili.app.dynamic.v1.Dynamic/OurCityClickReport",
2683            );
2684            let mut req = request.into_request();
2685            req.extensions_mut()
2686                .insert(
2687                    GrpcMethod::new(
2688                        "bilibili.app.dynamic.v1.Dynamic",
2689                        "OurCityClickReport",
2690                    ),
2691                );
2692            self.inner.unary(req, path, codec).await
2693        }
2694        ///
2695        pub async fn s_video(
2696            &mut self,
2697            request: impl tonic::IntoRequest<super::SVideoReq>,
2698        ) -> std::result::Result<tonic::Response<super::SVideoReply>, tonic::Status> {
2699            self.inner
2700                .ready()
2701                .await
2702                .map_err(|e| {
2703                    tonic::Status::unknown(
2704                        format!("Service was not ready: {}", e.into()),
2705                    )
2706                })?;
2707            let codec = tonic::codec::ProstCodec::default();
2708            let path = http::uri::PathAndQuery::from_static(
2709                "/bilibili.app.dynamic.v1.Dynamic/SVideo",
2710            );
2711            let mut req = request.into_request();
2712            req.extensions_mut()
2713                .insert(GrpcMethod::new("bilibili.app.dynamic.v1.Dynamic", "SVideo"));
2714            self.inner.unary(req, path, codec).await
2715        }
2716    }
2717}
2718/// Generated server implementations.
2719pub mod dynamic_server {
2720    #![allow(
2721        unused_variables,
2722        dead_code,
2723        missing_docs,
2724        clippy::wildcard_imports,
2725        clippy::let_unit_value,
2726    )]
2727    use tonic::codegen::*;
2728    /// Generated trait containing gRPC methods that should be implemented for use with DynamicServer.
2729    #[async_trait]
2730    pub trait Dynamic: std::marker::Send + std::marker::Sync + 'static {
2731        ///
2732        async fn dyn_details(
2733            &self,
2734            request: tonic::Request<super::DynDetailsReq>,
2735        ) -> std::result::Result<tonic::Response<super::DynDetailsReply>, tonic::Status>;
2736        ///
2737        async fn dyn_mix_up_list_search(
2738            &self,
2739            request: tonic::Request<super::DynMixUpListSearchReq>,
2740        ) -> std::result::Result<
2741            tonic::Response<super::DynMixUpListSearchReply>,
2742            tonic::Status,
2743        >;
2744        ///
2745        async fn dyn_mix_up_list_view_more(
2746            &self,
2747            request: tonic::Request<super::NoReq>,
2748        ) -> std::result::Result<
2749            tonic::Response<super::DynMixUpListViewMoreReply>,
2750            tonic::Status,
2751        >;
2752        ///
2753        async fn dyn_our_city(
2754            &self,
2755            request: tonic::Request<super::DynOurCityReq>,
2756        ) -> std::result::Result<tonic::Response<super::DynOurCityReply>, tonic::Status>;
2757        ///
2758        async fn dyn_our_city_switch(
2759            &self,
2760            request: tonic::Request<super::DynOurCitySwitchReq>,
2761        ) -> std::result::Result<tonic::Response<super::NoReply>, tonic::Status>;
2762        ///
2763        async fn dyn_red(
2764            &self,
2765            request: tonic::Request<super::DynRedReq>,
2766        ) -> std::result::Result<tonic::Response<super::DynRedReply>, tonic::Status>;
2767        ///
2768        async fn dyn_tab(
2769            &self,
2770            request: tonic::Request<super::DynTabReq>,
2771        ) -> std::result::Result<tonic::Response<super::DynTabReply>, tonic::Status>;
2772        ///
2773        async fn dyn_upd_offset(
2774            &self,
2775            request: tonic::Request<super::DynUpdOffsetReq>,
2776        ) -> std::result::Result<tonic::Response<super::NoReply>, tonic::Status>;
2777        ///
2778        async fn dyn_video(
2779            &self,
2780            request: tonic::Request<super::DynVideoReq>,
2781        ) -> std::result::Result<
2782            tonic::Response<super::DynVideoReqReply>,
2783            tonic::Status,
2784        >;
2785        ///
2786        async fn dyn_video_personal(
2787            &self,
2788            request: tonic::Request<super::DynVideoPersonalReq>,
2789        ) -> std::result::Result<
2790            tonic::Response<super::DynVideoPersonalReply>,
2791            tonic::Status,
2792        >;
2793        ///
2794        async fn geo_coder(
2795            &self,
2796            request: tonic::Request<super::GeoCoderReq>,
2797        ) -> std::result::Result<tonic::Response<super::GeoCoderReply>, tonic::Status>;
2798        ///
2799        async fn our_city_click_report(
2800            &self,
2801            request: tonic::Request<super::OurCityClickReportReq>,
2802        ) -> std::result::Result<
2803            tonic::Response<super::OurCityClickReportReply>,
2804            tonic::Status,
2805        >;
2806        ///
2807        async fn s_video(
2808            &self,
2809            request: tonic::Request<super::SVideoReq>,
2810        ) -> std::result::Result<tonic::Response<super::SVideoReply>, tonic::Status>;
2811    }
2812    ///
2813    #[derive(Debug)]
2814    pub struct DynamicServer<T> {
2815        inner: Arc<T>,
2816        accept_compression_encodings: EnabledCompressionEncodings,
2817        send_compression_encodings: EnabledCompressionEncodings,
2818        max_decoding_message_size: Option<usize>,
2819        max_encoding_message_size: Option<usize>,
2820    }
2821    impl<T> DynamicServer<T> {
2822        pub fn new(inner: T) -> Self {
2823            Self::from_arc(Arc::new(inner))
2824        }
2825        pub fn from_arc(inner: Arc<T>) -> Self {
2826            Self {
2827                inner,
2828                accept_compression_encodings: Default::default(),
2829                send_compression_encodings: Default::default(),
2830                max_decoding_message_size: None,
2831                max_encoding_message_size: None,
2832            }
2833        }
2834        pub fn with_interceptor<F>(
2835            inner: T,
2836            interceptor: F,
2837        ) -> InterceptedService<Self, F>
2838        where
2839            F: tonic::service::Interceptor,
2840        {
2841            InterceptedService::new(Self::new(inner), interceptor)
2842        }
2843        /// Enable decompressing requests with the given encoding.
2844        #[must_use]
2845        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2846            self.accept_compression_encodings.enable(encoding);
2847            self
2848        }
2849        /// Compress responses with the given encoding, if the client supports it.
2850        #[must_use]
2851        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2852            self.send_compression_encodings.enable(encoding);
2853            self
2854        }
2855        /// Limits the maximum size of a decoded message.
2856        ///
2857        /// Default: `4MB`
2858        #[must_use]
2859        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2860            self.max_decoding_message_size = Some(limit);
2861            self
2862        }
2863        /// Limits the maximum size of an encoded message.
2864        ///
2865        /// Default: `usize::MAX`
2866        #[must_use]
2867        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2868            self.max_encoding_message_size = Some(limit);
2869            self
2870        }
2871    }
2872    impl<T, B> tonic::codegen::Service<http::Request<B>> for DynamicServer<T>
2873    where
2874        T: Dynamic,
2875        B: Body + std::marker::Send + 'static,
2876        B::Error: Into<StdError> + std::marker::Send + 'static,
2877    {
2878        type Response = http::Response<tonic::body::BoxBody>;
2879        type Error = std::convert::Infallible;
2880        type Future = BoxFuture<Self::Response, Self::Error>;
2881        fn poll_ready(
2882            &mut self,
2883            _cx: &mut Context<'_>,
2884        ) -> Poll<std::result::Result<(), Self::Error>> {
2885            Poll::Ready(Ok(()))
2886        }
2887        fn call(&mut self, req: http::Request<B>) -> Self::Future {
2888            match req.uri().path() {
2889                "/bilibili.app.dynamic.v1.Dynamic/DynDetails" => {
2890                    #[allow(non_camel_case_types)]
2891                    struct DynDetailsSvc<T: Dynamic>(pub Arc<T>);
2892                    impl<T: Dynamic> tonic::server::UnaryService<super::DynDetailsReq>
2893                    for DynDetailsSvc<T> {
2894                        type Response = super::DynDetailsReply;
2895                        type Future = BoxFuture<
2896                            tonic::Response<Self::Response>,
2897                            tonic::Status,
2898                        >;
2899                        fn call(
2900                            &mut self,
2901                            request: tonic::Request<super::DynDetailsReq>,
2902                        ) -> Self::Future {
2903                            let inner = Arc::clone(&self.0);
2904                            let fut = async move {
2905                                <T as Dynamic>::dyn_details(&inner, request).await
2906                            };
2907                            Box::pin(fut)
2908                        }
2909                    }
2910                    let accept_compression_encodings = self.accept_compression_encodings;
2911                    let send_compression_encodings = self.send_compression_encodings;
2912                    let max_decoding_message_size = self.max_decoding_message_size;
2913                    let max_encoding_message_size = self.max_encoding_message_size;
2914                    let inner = self.inner.clone();
2915                    let fut = async move {
2916                        let method = DynDetailsSvc(inner);
2917                        let codec = tonic::codec::ProstCodec::default();
2918                        let mut grpc = tonic::server::Grpc::new(codec)
2919                            .apply_compression_config(
2920                                accept_compression_encodings,
2921                                send_compression_encodings,
2922                            )
2923                            .apply_max_message_size_config(
2924                                max_decoding_message_size,
2925                                max_encoding_message_size,
2926                            );
2927                        let res = grpc.unary(method, req).await;
2928                        Ok(res)
2929                    };
2930                    Box::pin(fut)
2931                }
2932                "/bilibili.app.dynamic.v1.Dynamic/DynMixUpListSearch" => {
2933                    #[allow(non_camel_case_types)]
2934                    struct DynMixUpListSearchSvc<T: Dynamic>(pub Arc<T>);
2935                    impl<
2936                        T: Dynamic,
2937                    > tonic::server::UnaryService<super::DynMixUpListSearchReq>
2938                    for DynMixUpListSearchSvc<T> {
2939                        type Response = super::DynMixUpListSearchReply;
2940                        type Future = BoxFuture<
2941                            tonic::Response<Self::Response>,
2942                            tonic::Status,
2943                        >;
2944                        fn call(
2945                            &mut self,
2946                            request: tonic::Request<super::DynMixUpListSearchReq>,
2947                        ) -> Self::Future {
2948                            let inner = Arc::clone(&self.0);
2949                            let fut = async move {
2950                                <T as Dynamic>::dyn_mix_up_list_search(&inner, request)
2951                                    .await
2952                            };
2953                            Box::pin(fut)
2954                        }
2955                    }
2956                    let accept_compression_encodings = self.accept_compression_encodings;
2957                    let send_compression_encodings = self.send_compression_encodings;
2958                    let max_decoding_message_size = self.max_decoding_message_size;
2959                    let max_encoding_message_size = self.max_encoding_message_size;
2960                    let inner = self.inner.clone();
2961                    let fut = async move {
2962                        let method = DynMixUpListSearchSvc(inner);
2963                        let codec = tonic::codec::ProstCodec::default();
2964                        let mut grpc = tonic::server::Grpc::new(codec)
2965                            .apply_compression_config(
2966                                accept_compression_encodings,
2967                                send_compression_encodings,
2968                            )
2969                            .apply_max_message_size_config(
2970                                max_decoding_message_size,
2971                                max_encoding_message_size,
2972                            );
2973                        let res = grpc.unary(method, req).await;
2974                        Ok(res)
2975                    };
2976                    Box::pin(fut)
2977                }
2978                "/bilibili.app.dynamic.v1.Dynamic/DynMixUpListViewMore" => {
2979                    #[allow(non_camel_case_types)]
2980                    struct DynMixUpListViewMoreSvc<T: Dynamic>(pub Arc<T>);
2981                    impl<T: Dynamic> tonic::server::UnaryService<super::NoReq>
2982                    for DynMixUpListViewMoreSvc<T> {
2983                        type Response = super::DynMixUpListViewMoreReply;
2984                        type Future = BoxFuture<
2985                            tonic::Response<Self::Response>,
2986                            tonic::Status,
2987                        >;
2988                        fn call(
2989                            &mut self,
2990                            request: tonic::Request<super::NoReq>,
2991                        ) -> Self::Future {
2992                            let inner = Arc::clone(&self.0);
2993                            let fut = async move {
2994                                <T as Dynamic>::dyn_mix_up_list_view_more(&inner, request)
2995                                    .await
2996                            };
2997                            Box::pin(fut)
2998                        }
2999                    }
3000                    let accept_compression_encodings = self.accept_compression_encodings;
3001                    let send_compression_encodings = self.send_compression_encodings;
3002                    let max_decoding_message_size = self.max_decoding_message_size;
3003                    let max_encoding_message_size = self.max_encoding_message_size;
3004                    let inner = self.inner.clone();
3005                    let fut = async move {
3006                        let method = DynMixUpListViewMoreSvc(inner);
3007                        let codec = tonic::codec::ProstCodec::default();
3008                        let mut grpc = tonic::server::Grpc::new(codec)
3009                            .apply_compression_config(
3010                                accept_compression_encodings,
3011                                send_compression_encodings,
3012                            )
3013                            .apply_max_message_size_config(
3014                                max_decoding_message_size,
3015                                max_encoding_message_size,
3016                            );
3017                        let res = grpc.unary(method, req).await;
3018                        Ok(res)
3019                    };
3020                    Box::pin(fut)
3021                }
3022                "/bilibili.app.dynamic.v1.Dynamic/DynOurCity" => {
3023                    #[allow(non_camel_case_types)]
3024                    struct DynOurCitySvc<T: Dynamic>(pub Arc<T>);
3025                    impl<T: Dynamic> tonic::server::UnaryService<super::DynOurCityReq>
3026                    for DynOurCitySvc<T> {
3027                        type Response = super::DynOurCityReply;
3028                        type Future = BoxFuture<
3029                            tonic::Response<Self::Response>,
3030                            tonic::Status,
3031                        >;
3032                        fn call(
3033                            &mut self,
3034                            request: tonic::Request<super::DynOurCityReq>,
3035                        ) -> Self::Future {
3036                            let inner = Arc::clone(&self.0);
3037                            let fut = async move {
3038                                <T as Dynamic>::dyn_our_city(&inner, request).await
3039                            };
3040                            Box::pin(fut)
3041                        }
3042                    }
3043                    let accept_compression_encodings = self.accept_compression_encodings;
3044                    let send_compression_encodings = self.send_compression_encodings;
3045                    let max_decoding_message_size = self.max_decoding_message_size;
3046                    let max_encoding_message_size = self.max_encoding_message_size;
3047                    let inner = self.inner.clone();
3048                    let fut = async move {
3049                        let method = DynOurCitySvc(inner);
3050                        let codec = tonic::codec::ProstCodec::default();
3051                        let mut grpc = tonic::server::Grpc::new(codec)
3052                            .apply_compression_config(
3053                                accept_compression_encodings,
3054                                send_compression_encodings,
3055                            )
3056                            .apply_max_message_size_config(
3057                                max_decoding_message_size,
3058                                max_encoding_message_size,
3059                            );
3060                        let res = grpc.unary(method, req).await;
3061                        Ok(res)
3062                    };
3063                    Box::pin(fut)
3064                }
3065                "/bilibili.app.dynamic.v1.Dynamic/DynOurCitySwitch" => {
3066                    #[allow(non_camel_case_types)]
3067                    struct DynOurCitySwitchSvc<T: Dynamic>(pub Arc<T>);
3068                    impl<
3069                        T: Dynamic,
3070                    > tonic::server::UnaryService<super::DynOurCitySwitchReq>
3071                    for DynOurCitySwitchSvc<T> {
3072                        type Response = super::NoReply;
3073                        type Future = BoxFuture<
3074                            tonic::Response<Self::Response>,
3075                            tonic::Status,
3076                        >;
3077                        fn call(
3078                            &mut self,
3079                            request: tonic::Request<super::DynOurCitySwitchReq>,
3080                        ) -> Self::Future {
3081                            let inner = Arc::clone(&self.0);
3082                            let fut = async move {
3083                                <T as Dynamic>::dyn_our_city_switch(&inner, request).await
3084                            };
3085                            Box::pin(fut)
3086                        }
3087                    }
3088                    let accept_compression_encodings = self.accept_compression_encodings;
3089                    let send_compression_encodings = self.send_compression_encodings;
3090                    let max_decoding_message_size = self.max_decoding_message_size;
3091                    let max_encoding_message_size = self.max_encoding_message_size;
3092                    let inner = self.inner.clone();
3093                    let fut = async move {
3094                        let method = DynOurCitySwitchSvc(inner);
3095                        let codec = tonic::codec::ProstCodec::default();
3096                        let mut grpc = tonic::server::Grpc::new(codec)
3097                            .apply_compression_config(
3098                                accept_compression_encodings,
3099                                send_compression_encodings,
3100                            )
3101                            .apply_max_message_size_config(
3102                                max_decoding_message_size,
3103                                max_encoding_message_size,
3104                            );
3105                        let res = grpc.unary(method, req).await;
3106                        Ok(res)
3107                    };
3108                    Box::pin(fut)
3109                }
3110                "/bilibili.app.dynamic.v1.Dynamic/DynRed" => {
3111                    #[allow(non_camel_case_types)]
3112                    struct DynRedSvc<T: Dynamic>(pub Arc<T>);
3113                    impl<T: Dynamic> tonic::server::UnaryService<super::DynRedReq>
3114                    for DynRedSvc<T> {
3115                        type Response = super::DynRedReply;
3116                        type Future = BoxFuture<
3117                            tonic::Response<Self::Response>,
3118                            tonic::Status,
3119                        >;
3120                        fn call(
3121                            &mut self,
3122                            request: tonic::Request<super::DynRedReq>,
3123                        ) -> Self::Future {
3124                            let inner = Arc::clone(&self.0);
3125                            let fut = async move {
3126                                <T as Dynamic>::dyn_red(&inner, request).await
3127                            };
3128                            Box::pin(fut)
3129                        }
3130                    }
3131                    let accept_compression_encodings = self.accept_compression_encodings;
3132                    let send_compression_encodings = self.send_compression_encodings;
3133                    let max_decoding_message_size = self.max_decoding_message_size;
3134                    let max_encoding_message_size = self.max_encoding_message_size;
3135                    let inner = self.inner.clone();
3136                    let fut = async move {
3137                        let method = DynRedSvc(inner);
3138                        let codec = tonic::codec::ProstCodec::default();
3139                        let mut grpc = tonic::server::Grpc::new(codec)
3140                            .apply_compression_config(
3141                                accept_compression_encodings,
3142                                send_compression_encodings,
3143                            )
3144                            .apply_max_message_size_config(
3145                                max_decoding_message_size,
3146                                max_encoding_message_size,
3147                            );
3148                        let res = grpc.unary(method, req).await;
3149                        Ok(res)
3150                    };
3151                    Box::pin(fut)
3152                }
3153                "/bilibili.app.dynamic.v1.Dynamic/DynTab" => {
3154                    #[allow(non_camel_case_types)]
3155                    struct DynTabSvc<T: Dynamic>(pub Arc<T>);
3156                    impl<T: Dynamic> tonic::server::UnaryService<super::DynTabReq>
3157                    for DynTabSvc<T> {
3158                        type Response = super::DynTabReply;
3159                        type Future = BoxFuture<
3160                            tonic::Response<Self::Response>,
3161                            tonic::Status,
3162                        >;
3163                        fn call(
3164                            &mut self,
3165                            request: tonic::Request<super::DynTabReq>,
3166                        ) -> Self::Future {
3167                            let inner = Arc::clone(&self.0);
3168                            let fut = async move {
3169                                <T as Dynamic>::dyn_tab(&inner, request).await
3170                            };
3171                            Box::pin(fut)
3172                        }
3173                    }
3174                    let accept_compression_encodings = self.accept_compression_encodings;
3175                    let send_compression_encodings = self.send_compression_encodings;
3176                    let max_decoding_message_size = self.max_decoding_message_size;
3177                    let max_encoding_message_size = self.max_encoding_message_size;
3178                    let inner = self.inner.clone();
3179                    let fut = async move {
3180                        let method = DynTabSvc(inner);
3181                        let codec = tonic::codec::ProstCodec::default();
3182                        let mut grpc = tonic::server::Grpc::new(codec)
3183                            .apply_compression_config(
3184                                accept_compression_encodings,
3185                                send_compression_encodings,
3186                            )
3187                            .apply_max_message_size_config(
3188                                max_decoding_message_size,
3189                                max_encoding_message_size,
3190                            );
3191                        let res = grpc.unary(method, req).await;
3192                        Ok(res)
3193                    };
3194                    Box::pin(fut)
3195                }
3196                "/bilibili.app.dynamic.v1.Dynamic/DynUpdOffset" => {
3197                    #[allow(non_camel_case_types)]
3198                    struct DynUpdOffsetSvc<T: Dynamic>(pub Arc<T>);
3199                    impl<T: Dynamic> tonic::server::UnaryService<super::DynUpdOffsetReq>
3200                    for DynUpdOffsetSvc<T> {
3201                        type Response = super::NoReply;
3202                        type Future = BoxFuture<
3203                            tonic::Response<Self::Response>,
3204                            tonic::Status,
3205                        >;
3206                        fn call(
3207                            &mut self,
3208                            request: tonic::Request<super::DynUpdOffsetReq>,
3209                        ) -> Self::Future {
3210                            let inner = Arc::clone(&self.0);
3211                            let fut = async move {
3212                                <T as Dynamic>::dyn_upd_offset(&inner, request).await
3213                            };
3214                            Box::pin(fut)
3215                        }
3216                    }
3217                    let accept_compression_encodings = self.accept_compression_encodings;
3218                    let send_compression_encodings = self.send_compression_encodings;
3219                    let max_decoding_message_size = self.max_decoding_message_size;
3220                    let max_encoding_message_size = self.max_encoding_message_size;
3221                    let inner = self.inner.clone();
3222                    let fut = async move {
3223                        let method = DynUpdOffsetSvc(inner);
3224                        let codec = tonic::codec::ProstCodec::default();
3225                        let mut grpc = tonic::server::Grpc::new(codec)
3226                            .apply_compression_config(
3227                                accept_compression_encodings,
3228                                send_compression_encodings,
3229                            )
3230                            .apply_max_message_size_config(
3231                                max_decoding_message_size,
3232                                max_encoding_message_size,
3233                            );
3234                        let res = grpc.unary(method, req).await;
3235                        Ok(res)
3236                    };
3237                    Box::pin(fut)
3238                }
3239                "/bilibili.app.dynamic.v1.Dynamic/DynVideo" => {
3240                    #[allow(non_camel_case_types)]
3241                    struct DynVideoSvc<T: Dynamic>(pub Arc<T>);
3242                    impl<T: Dynamic> tonic::server::UnaryService<super::DynVideoReq>
3243                    for DynVideoSvc<T> {
3244                        type Response = super::DynVideoReqReply;
3245                        type Future = BoxFuture<
3246                            tonic::Response<Self::Response>,
3247                            tonic::Status,
3248                        >;
3249                        fn call(
3250                            &mut self,
3251                            request: tonic::Request<super::DynVideoReq>,
3252                        ) -> Self::Future {
3253                            let inner = Arc::clone(&self.0);
3254                            let fut = async move {
3255                                <T as Dynamic>::dyn_video(&inner, request).await
3256                            };
3257                            Box::pin(fut)
3258                        }
3259                    }
3260                    let accept_compression_encodings = self.accept_compression_encodings;
3261                    let send_compression_encodings = self.send_compression_encodings;
3262                    let max_decoding_message_size = self.max_decoding_message_size;
3263                    let max_encoding_message_size = self.max_encoding_message_size;
3264                    let inner = self.inner.clone();
3265                    let fut = async move {
3266                        let method = DynVideoSvc(inner);
3267                        let codec = tonic::codec::ProstCodec::default();
3268                        let mut grpc = tonic::server::Grpc::new(codec)
3269                            .apply_compression_config(
3270                                accept_compression_encodings,
3271                                send_compression_encodings,
3272                            )
3273                            .apply_max_message_size_config(
3274                                max_decoding_message_size,
3275                                max_encoding_message_size,
3276                            );
3277                        let res = grpc.unary(method, req).await;
3278                        Ok(res)
3279                    };
3280                    Box::pin(fut)
3281                }
3282                "/bilibili.app.dynamic.v1.Dynamic/DynVideoPersonal" => {
3283                    #[allow(non_camel_case_types)]
3284                    struct DynVideoPersonalSvc<T: Dynamic>(pub Arc<T>);
3285                    impl<
3286                        T: Dynamic,
3287                    > tonic::server::UnaryService<super::DynVideoPersonalReq>
3288                    for DynVideoPersonalSvc<T> {
3289                        type Response = super::DynVideoPersonalReply;
3290                        type Future = BoxFuture<
3291                            tonic::Response<Self::Response>,
3292                            tonic::Status,
3293                        >;
3294                        fn call(
3295                            &mut self,
3296                            request: tonic::Request<super::DynVideoPersonalReq>,
3297                        ) -> Self::Future {
3298                            let inner = Arc::clone(&self.0);
3299                            let fut = async move {
3300                                <T as Dynamic>::dyn_video_personal(&inner, request).await
3301                            };
3302                            Box::pin(fut)
3303                        }
3304                    }
3305                    let accept_compression_encodings = self.accept_compression_encodings;
3306                    let send_compression_encodings = self.send_compression_encodings;
3307                    let max_decoding_message_size = self.max_decoding_message_size;
3308                    let max_encoding_message_size = self.max_encoding_message_size;
3309                    let inner = self.inner.clone();
3310                    let fut = async move {
3311                        let method = DynVideoPersonalSvc(inner);
3312                        let codec = tonic::codec::ProstCodec::default();
3313                        let mut grpc = tonic::server::Grpc::new(codec)
3314                            .apply_compression_config(
3315                                accept_compression_encodings,
3316                                send_compression_encodings,
3317                            )
3318                            .apply_max_message_size_config(
3319                                max_decoding_message_size,
3320                                max_encoding_message_size,
3321                            );
3322                        let res = grpc.unary(method, req).await;
3323                        Ok(res)
3324                    };
3325                    Box::pin(fut)
3326                }
3327                "/bilibili.app.dynamic.v1.Dynamic/GeoCoder" => {
3328                    #[allow(non_camel_case_types)]
3329                    struct GeoCoderSvc<T: Dynamic>(pub Arc<T>);
3330                    impl<T: Dynamic> tonic::server::UnaryService<super::GeoCoderReq>
3331                    for GeoCoderSvc<T> {
3332                        type Response = super::GeoCoderReply;
3333                        type Future = BoxFuture<
3334                            tonic::Response<Self::Response>,
3335                            tonic::Status,
3336                        >;
3337                        fn call(
3338                            &mut self,
3339                            request: tonic::Request<super::GeoCoderReq>,
3340                        ) -> Self::Future {
3341                            let inner = Arc::clone(&self.0);
3342                            let fut = async move {
3343                                <T as Dynamic>::geo_coder(&inner, request).await
3344                            };
3345                            Box::pin(fut)
3346                        }
3347                    }
3348                    let accept_compression_encodings = self.accept_compression_encodings;
3349                    let send_compression_encodings = self.send_compression_encodings;
3350                    let max_decoding_message_size = self.max_decoding_message_size;
3351                    let max_encoding_message_size = self.max_encoding_message_size;
3352                    let inner = self.inner.clone();
3353                    let fut = async move {
3354                        let method = GeoCoderSvc(inner);
3355                        let codec = tonic::codec::ProstCodec::default();
3356                        let mut grpc = tonic::server::Grpc::new(codec)
3357                            .apply_compression_config(
3358                                accept_compression_encodings,
3359                                send_compression_encodings,
3360                            )
3361                            .apply_max_message_size_config(
3362                                max_decoding_message_size,
3363                                max_encoding_message_size,
3364                            );
3365                        let res = grpc.unary(method, req).await;
3366                        Ok(res)
3367                    };
3368                    Box::pin(fut)
3369                }
3370                "/bilibili.app.dynamic.v1.Dynamic/OurCityClickReport" => {
3371                    #[allow(non_camel_case_types)]
3372                    struct OurCityClickReportSvc<T: Dynamic>(pub Arc<T>);
3373                    impl<
3374                        T: Dynamic,
3375                    > tonic::server::UnaryService<super::OurCityClickReportReq>
3376                    for OurCityClickReportSvc<T> {
3377                        type Response = super::OurCityClickReportReply;
3378                        type Future = BoxFuture<
3379                            tonic::Response<Self::Response>,
3380                            tonic::Status,
3381                        >;
3382                        fn call(
3383                            &mut self,
3384                            request: tonic::Request<super::OurCityClickReportReq>,
3385                        ) -> Self::Future {
3386                            let inner = Arc::clone(&self.0);
3387                            let fut = async move {
3388                                <T as Dynamic>::our_city_click_report(&inner, request).await
3389                            };
3390                            Box::pin(fut)
3391                        }
3392                    }
3393                    let accept_compression_encodings = self.accept_compression_encodings;
3394                    let send_compression_encodings = self.send_compression_encodings;
3395                    let max_decoding_message_size = self.max_decoding_message_size;
3396                    let max_encoding_message_size = self.max_encoding_message_size;
3397                    let inner = self.inner.clone();
3398                    let fut = async move {
3399                        let method = OurCityClickReportSvc(inner);
3400                        let codec = tonic::codec::ProstCodec::default();
3401                        let mut grpc = tonic::server::Grpc::new(codec)
3402                            .apply_compression_config(
3403                                accept_compression_encodings,
3404                                send_compression_encodings,
3405                            )
3406                            .apply_max_message_size_config(
3407                                max_decoding_message_size,
3408                                max_encoding_message_size,
3409                            );
3410                        let res = grpc.unary(method, req).await;
3411                        Ok(res)
3412                    };
3413                    Box::pin(fut)
3414                }
3415                "/bilibili.app.dynamic.v1.Dynamic/SVideo" => {
3416                    #[allow(non_camel_case_types)]
3417                    struct SVideoSvc<T: Dynamic>(pub Arc<T>);
3418                    impl<T: Dynamic> tonic::server::UnaryService<super::SVideoReq>
3419                    for SVideoSvc<T> {
3420                        type Response = super::SVideoReply;
3421                        type Future = BoxFuture<
3422                            tonic::Response<Self::Response>,
3423                            tonic::Status,
3424                        >;
3425                        fn call(
3426                            &mut self,
3427                            request: tonic::Request<super::SVideoReq>,
3428                        ) -> Self::Future {
3429                            let inner = Arc::clone(&self.0);
3430                            let fut = async move {
3431                                <T as Dynamic>::s_video(&inner, request).await
3432                            };
3433                            Box::pin(fut)
3434                        }
3435                    }
3436                    let accept_compression_encodings = self.accept_compression_encodings;
3437                    let send_compression_encodings = self.send_compression_encodings;
3438                    let max_decoding_message_size = self.max_decoding_message_size;
3439                    let max_encoding_message_size = self.max_encoding_message_size;
3440                    let inner = self.inner.clone();
3441                    let fut = async move {
3442                        let method = SVideoSvc(inner);
3443                        let codec = tonic::codec::ProstCodec::default();
3444                        let mut grpc = tonic::server::Grpc::new(codec)
3445                            .apply_compression_config(
3446                                accept_compression_encodings,
3447                                send_compression_encodings,
3448                            )
3449                            .apply_max_message_size_config(
3450                                max_decoding_message_size,
3451                                max_encoding_message_size,
3452                            );
3453                        let res = grpc.unary(method, req).await;
3454                        Ok(res)
3455                    };
3456                    Box::pin(fut)
3457                }
3458                _ => {
3459                    Box::pin(async move {
3460                        let mut response = http::Response::new(empty_body());
3461                        let headers = response.headers_mut();
3462                        headers
3463                            .insert(
3464                                tonic::Status::GRPC_STATUS,
3465                                (tonic::Code::Unimplemented as i32).into(),
3466                            );
3467                        headers
3468                            .insert(
3469                                http::header::CONTENT_TYPE,
3470                                tonic::metadata::GRPC_CONTENT_TYPE,
3471                            );
3472                        Ok(response)
3473                    })
3474                }
3475            }
3476        }
3477    }
3478    impl<T> Clone for DynamicServer<T> {
3479        fn clone(&self) -> Self {
3480            let inner = self.inner.clone();
3481            Self {
3482                inner,
3483                accept_compression_encodings: self.accept_compression_encodings,
3484                send_compression_encodings: self.send_compression_encodings,
3485                max_decoding_message_size: self.max_decoding_message_size,
3486                max_encoding_message_size: self.max_encoding_message_size,
3487            }
3488        }
3489    }
3490    /// Generated gRPC service name
3491    pub const SERVICE_NAME: &str = "bilibili.app.dynamic.v1.Dynamic";
3492    impl<T> tonic::server::NamedService for DynamicServer<T> {
3493        const NAME: &'static str = SERVICE_NAME;
3494    }
3495}