gplay_protobuf/
googleplay.rs

1// This file is @generated by prost-build.
2#[allow(clippy::derive_partial_eq_without_eq)]
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct AndroidAppDeliveryData {
5    #[prost(int64, optional, tag = "1")]
6    pub download_size: ::core::option::Option<i64>,
7    #[prost(string, optional, tag = "2")]
8    pub sha1: ::core::option::Option<::prost::alloc::string::String>,
9    #[prost(string, optional, tag = "3")]
10    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
11    #[prost(message, repeated, tag = "4")]
12    pub additional_file: ::prost::alloc::vec::Vec<AppFileMetadata>,
13    #[prost(message, repeated, tag = "5")]
14    pub download_auth_cookie: ::prost::alloc::vec::Vec<HttpCookie>,
15    #[prost(bool, optional, tag = "6")]
16    pub forward_locked: ::core::option::Option<bool>,
17    #[prost(int64, optional, tag = "7")]
18    pub refund_timeout: ::core::option::Option<i64>,
19    #[prost(bool, optional, tag = "8", default = "true")]
20    pub server_initiated: ::core::option::Option<bool>,
21    #[prost(int64, optional, tag = "9")]
22    pub post_install_refund_window_millis: ::core::option::Option<i64>,
23    #[prost(bool, optional, tag = "10")]
24    pub immediate_start_needed: ::core::option::Option<bool>,
25    #[prost(message, optional, tag = "11")]
26    pub patch_data: ::core::option::Option<AndroidAppPatchData>,
27    #[prost(message, optional, tag = "12")]
28    pub encryption_params: ::core::option::Option<EncryptionParams>,
29    #[prost(string, optional, tag = "13")]
30    pub compressed_download_url: ::core::option::Option<::prost::alloc::string::String>,
31    #[prost(int64, optional, tag = "14")]
32    pub compressed_size: ::core::option::Option<i64>,
33    #[prost(message, repeated, tag = "15")]
34    pub split_delivery_data: ::prost::alloc::vec::Vec<SplitDeliveryData>,
35    #[prost(int32, optional, tag = "16")]
36    pub install_location: ::core::option::Option<i32>,
37    #[prost(int64, optional, tag = "17")]
38    pub r#type: ::core::option::Option<i64>,
39    #[prost(message, optional, tag = "18")]
40    pub compressed_app_data: ::core::option::Option<CompressedAppData>,
41    #[prost(string, optional, tag = "19")]
42    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
43}
44#[allow(clippy::derive_partial_eq_without_eq)]
45#[derive(Clone, PartialEq, ::prost::Message)]
46pub struct SplitDeliveryData {
47    #[prost(string, optional, tag = "1")]
48    pub name: ::core::option::Option<::prost::alloc::string::String>,
49    #[prost(int64, optional, tag = "2")]
50    pub download_size: ::core::option::Option<i64>,
51    #[prost(int64, optional, tag = "3")]
52    pub compressed_size: ::core::option::Option<i64>,
53    #[prost(string, optional, tag = "4")]
54    pub sha1: ::core::option::Option<::prost::alloc::string::String>,
55    #[prost(string, optional, tag = "5")]
56    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
57    #[prost(string, optional, tag = "6")]
58    pub compressed_download_url: ::core::option::Option<::prost::alloc::string::String>,
59    #[prost(message, optional, tag = "7")]
60    pub patch_data: ::core::option::Option<AndroidAppPatchData>,
61    #[prost(message, optional, tag = "8")]
62    pub compressed_app_data: ::core::option::Option<CompressedAppData>,
63    #[prost(string, optional, tag = "9")]
64    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
65}
66#[allow(clippy::derive_partial_eq_without_eq)]
67#[derive(Clone, PartialEq, ::prost::Message)]
68pub struct AndroidAppPatchData {
69    #[prost(int32, optional, tag = "1")]
70    pub base_version_code: ::core::option::Option<i32>,
71    #[prost(string, optional, tag = "2")]
72    pub base_sha1: ::core::option::Option<::prost::alloc::string::String>,
73    #[prost(string, optional, tag = "3")]
74    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
75    #[prost(int32, optional, tag = "4", default = "1")]
76    pub patch_format: ::core::option::Option<i32>,
77    #[prost(int64, optional, tag = "5")]
78    pub max_patch_size: ::core::option::Option<i64>,
79}
80#[allow(clippy::derive_partial_eq_without_eq)]
81#[derive(Clone, PartialEq, ::prost::Message)]
82pub struct CompressedAppData {
83    #[prost(int64, optional, tag = "1")]
84    pub r#type: ::core::option::Option<i64>,
85    #[prost(int64, optional, tag = "2")]
86    pub size: ::core::option::Option<i64>,
87    #[prost(string, optional, tag = "3")]
88    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
89}
90#[allow(clippy::derive_partial_eq_without_eq)]
91#[derive(Clone, PartialEq, ::prost::Message)]
92pub struct AppFileMetadata {
93    #[prost(int32, optional, tag = "1")]
94    pub file_type: ::core::option::Option<i32>,
95    #[prost(int32, optional, tag = "2")]
96    pub version_code: ::core::option::Option<i32>,
97    #[prost(int64, optional, tag = "3")]
98    pub size: ::core::option::Option<i64>,
99    #[prost(string, optional, tag = "4")]
100    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
101    #[prost(message, optional, tag = "5")]
102    pub patch_data: ::core::option::Option<AndroidAppPatchData>,
103    #[prost(int64, optional, tag = "6")]
104    pub compressed_size: ::core::option::Option<i64>,
105    #[prost(string, optional, tag = "7")]
106    pub compressed_download_url: ::core::option::Option<::prost::alloc::string::String>,
107    #[prost(string, optional, tag = "8")]
108    pub sha1: ::core::option::Option<::prost::alloc::string::String>,
109}
110#[allow(clippy::derive_partial_eq_without_eq)]
111#[derive(Clone, PartialEq, ::prost::Message)]
112pub struct EncryptionParams {
113    #[prost(int32, optional, tag = "1")]
114    pub version: ::core::option::Option<i32>,
115    #[prost(string, optional, tag = "2")]
116    pub encryption_key: ::core::option::Option<::prost::alloc::string::String>,
117    #[prost(string, optional, tag = "3")]
118    pub h_mac_key: ::core::option::Option<::prost::alloc::string::String>,
119}
120#[allow(clippy::derive_partial_eq_without_eq)]
121#[derive(Clone, PartialEq, ::prost::Message)]
122pub struct HttpCookie {
123    #[prost(string, optional, tag = "1")]
124    pub name: ::core::option::Option<::prost::alloc::string::String>,
125    #[prost(string, optional, tag = "2")]
126    pub value: ::core::option::Option<::prost::alloc::string::String>,
127}
128#[allow(clippy::derive_partial_eq_without_eq)]
129#[derive(Clone, PartialEq, ::prost::Message)]
130pub struct Address {
131    #[prost(string, optional, tag = "1")]
132    pub name: ::core::option::Option<::prost::alloc::string::String>,
133    #[prost(string, optional, tag = "2")]
134    pub address_line1: ::core::option::Option<::prost::alloc::string::String>,
135    #[prost(string, optional, tag = "3")]
136    pub address_line2: ::core::option::Option<::prost::alloc::string::String>,
137    #[prost(string, optional, tag = "4")]
138    pub city: ::core::option::Option<::prost::alloc::string::String>,
139    #[prost(string, optional, tag = "5")]
140    pub state: ::core::option::Option<::prost::alloc::string::String>,
141    #[prost(string, optional, tag = "6")]
142    pub postal_code: ::core::option::Option<::prost::alloc::string::String>,
143    #[prost(string, optional, tag = "7")]
144    pub postal_country: ::core::option::Option<::prost::alloc::string::String>,
145    #[prost(string, optional, tag = "8")]
146    pub dependent_locality: ::core::option::Option<::prost::alloc::string::String>,
147    #[prost(string, optional, tag = "9")]
148    pub sorting_code: ::core::option::Option<::prost::alloc::string::String>,
149    #[prost(string, optional, tag = "10")]
150    pub language_code: ::core::option::Option<::prost::alloc::string::String>,
151    #[prost(string, optional, tag = "11")]
152    pub phone_number: ::core::option::Option<::prost::alloc::string::String>,
153    #[prost(bool, optional, tag = "12")]
154    pub deprecated_is_reduced: ::core::option::Option<bool>,
155    #[prost(string, optional, tag = "13")]
156    pub first_name: ::core::option::Option<::prost::alloc::string::String>,
157    #[prost(string, optional, tag = "14")]
158    pub last_name: ::core::option::Option<::prost::alloc::string::String>,
159    #[prost(string, optional, tag = "15")]
160    pub email: ::core::option::Option<::prost::alloc::string::String>,
161}
162#[allow(clippy::derive_partial_eq_without_eq)]
163#[derive(Clone, PartialEq, ::prost::Message)]
164pub struct BrowseLink {
165    #[prost(string, optional, tag = "1")]
166    pub name: ::core::option::Option<::prost::alloc::string::String>,
167    #[prost(string, optional, tag = "3")]
168    pub data_url: ::core::option::Option<::prost::alloc::string::String>,
169    #[prost(bytes = "vec", optional, tag = "4")]
170    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
171    #[prost(message, optional, tag = "5")]
172    pub icon: ::core::option::Option<Image>,
173}
174#[allow(clippy::derive_partial_eq_without_eq)]
175#[derive(Clone, PartialEq, ::prost::Message)]
176pub struct BrowseResponse {
177    #[prost(string, optional, tag = "1")]
178    pub contents_url: ::core::option::Option<::prost::alloc::string::String>,
179    #[prost(string, optional, tag = "2")]
180    pub promo_url: ::core::option::Option<::prost::alloc::string::String>,
181    #[prost(message, repeated, tag = "3")]
182    pub category: ::prost::alloc::vec::Vec<BrowseLink>,
183    #[prost(message, repeated, tag = "4")]
184    pub breadcrumb: ::prost::alloc::vec::Vec<BrowseLink>,
185    #[prost(message, repeated, tag = "5")]
186    pub quick_link: ::prost::alloc::vec::Vec<QuickLink>,
187    #[prost(bytes = "vec", optional, tag = "6")]
188    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
189    #[prost(string, optional, tag = "7")]
190    pub title: ::core::option::Option<::prost::alloc::string::String>,
191    #[prost(int32, optional, tag = "8")]
192    pub backend_id: ::core::option::Option<i32>,
193    #[prost(message, optional, tag = "9")]
194    pub browse_tab: ::core::option::Option<BrowseTab>,
195    #[prost(int32, optional, tag = "10")]
196    pub landing_tab_index: ::core::option::Option<i32>,
197    #[prost(int32, optional, tag = "11")]
198    pub quick_link_tab_index: ::core::option::Option<i32>,
199    #[prost(int32, optional, tag = "12")]
200    pub quick_link_fallback_tab_index: ::core::option::Option<i32>,
201    #[prost(bool, optional, tag = "14")]
202    pub is_family_safe: ::core::option::Option<bool>,
203    #[prost(string, optional, tag = "18")]
204    pub share_url: ::core::option::Option<::prost::alloc::string::String>,
205}
206#[allow(clippy::derive_partial_eq_without_eq)]
207#[derive(Clone, PartialEq, ::prost::Message)]
208pub struct DirectPurchase {
209    #[prost(string, optional, tag = "1")]
210    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
211    #[prost(string, optional, tag = "2")]
212    pub purchase_item_id: ::core::option::Option<::prost::alloc::string::String>,
213    #[prost(string, optional, tag = "3")]
214    pub parent_item_id: ::core::option::Option<::prost::alloc::string::String>,
215    #[prost(int32, optional, tag = "4", default = "1")]
216    pub offer_type: ::core::option::Option<i32>,
217}
218#[allow(clippy::derive_partial_eq_without_eq)]
219#[derive(Clone, PartialEq, ::prost::Message)]
220pub struct RedeemGiftCard {
221    #[prost(string, optional, tag = "1")]
222    pub prefill_code: ::core::option::Option<::prost::alloc::string::String>,
223    #[prost(string, optional, tag = "2")]
224    pub partner_payload: ::core::option::Option<::prost::alloc::string::String>,
225}
226#[allow(clippy::derive_partial_eq_without_eq)]
227#[derive(Clone, PartialEq, ::prost::Message)]
228pub struct ResolvedLink {
229    #[prost(string, optional, tag = "1")]
230    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
231    #[prost(string, optional, tag = "2")]
232    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
233    #[prost(string, optional, tag = "3")]
234    pub search_url: ::core::option::Option<::prost::alloc::string::String>,
235    #[prost(message, optional, tag = "4")]
236    pub direct_purchase: ::core::option::Option<DirectPurchase>,
237    #[prost(string, optional, tag = "5")]
238    pub home_url: ::core::option::Option<::prost::alloc::string::String>,
239    #[prost(message, optional, tag = "6")]
240    pub redeem_gift_card: ::core::option::Option<RedeemGiftCard>,
241    #[prost(bytes = "vec", optional, tag = "7")]
242    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
243    #[prost(message, optional, tag = "8")]
244    pub doc_id: ::core::option::Option<DocId>,
245    #[prost(string, optional, tag = "9")]
246    pub wishlist_url: ::core::option::Option<::prost::alloc::string::String>,
247    #[prost(int32, optional, tag = "10")]
248    pub backend: ::core::option::Option<i32>,
249    #[prost(string, optional, tag = "11")]
250    pub query: ::core::option::Option<::prost::alloc::string::String>,
251    #[prost(string, optional, tag = "12")]
252    pub my_account_url: ::core::option::Option<::prost::alloc::string::String>,
253    #[prost(message, optional, tag = "13")]
254    pub help_center: ::core::option::Option<HelpCenter>,
255}
256#[allow(clippy::derive_partial_eq_without_eq)]
257#[derive(Clone, PartialEq, ::prost::Message)]
258pub struct HelpCenter {
259    #[prost(string, optional, tag = "1")]
260    pub context_id: ::core::option::Option<::prost::alloc::string::String>,
261}
262#[allow(clippy::derive_partial_eq_without_eq)]
263#[derive(Clone, PartialEq, ::prost::Message)]
264pub struct QuickLink {
265    #[prost(string, optional, tag = "1")]
266    pub name: ::core::option::Option<::prost::alloc::string::String>,
267    #[prost(message, optional, tag = "2")]
268    pub image: ::core::option::Option<Image>,
269    #[prost(message, optional, tag = "3")]
270    pub link: ::core::option::Option<ResolvedLink>,
271    #[prost(bool, optional, tag = "4")]
272    pub display_required: ::core::option::Option<bool>,
273    #[prost(bytes = "vec", optional, tag = "5")]
274    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
275    #[prost(int32, optional, tag = "6")]
276    pub backend_id: ::core::option::Option<i32>,
277    #[prost(bool, optional, tag = "7")]
278    pub prism_style: ::core::option::Option<bool>,
279}
280#[allow(clippy::derive_partial_eq_without_eq)]
281#[derive(Clone, PartialEq, ::prost::Message)]
282pub struct BrowseTab {
283    #[prost(string, optional, tag = "1")]
284    pub title: ::core::option::Option<::prost::alloc::string::String>,
285    #[prost(bytes = "vec", optional, tag = "2")]
286    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
287    #[prost(string, optional, tag = "3")]
288    pub list_url: ::core::option::Option<::prost::alloc::string::String>,
289    #[prost(message, repeated, tag = "4")]
290    pub browse_link: ::prost::alloc::vec::Vec<BrowseLink>,
291    #[prost(message, repeated, tag = "5")]
292    pub quick_link: ::prost::alloc::vec::Vec<QuickLink>,
293    #[prost(string, optional, tag = "6")]
294    pub quick_link_title: ::core::option::Option<::prost::alloc::string::String>,
295    #[prost(string, optional, tag = "7")]
296    pub categories_title: ::core::option::Option<::prost::alloc::string::String>,
297    #[prost(int32, optional, tag = "8")]
298    pub backend_id: ::core::option::Option<i32>,
299    #[prost(string, optional, tag = "9")]
300    pub highlights_banner_url: ::core::option::Option<::prost::alloc::string::String>,
301}
302#[allow(clippy::derive_partial_eq_without_eq)]
303#[derive(Clone, PartialEq, ::prost::Message)]
304pub struct BuyResponse {
305    #[prost(message, optional, tag = "1")]
306    pub purchase_response: ::core::option::Option<PurchaseNotificationResponse>,
307    #[prost(group, optional, tag = "2")]
308    pub checkoutinfo: ::core::option::Option<buy_response::CheckoutInfo>,
309    #[prost(string, optional, tag = "8")]
310    pub continue_via_url: ::core::option::Option<::prost::alloc::string::String>,
311    #[prost(string, optional, tag = "9")]
312    pub purchase_status_url: ::core::option::Option<::prost::alloc::string::String>,
313    #[prost(string, optional, tag = "12")]
314    pub checkout_service_id: ::core::option::Option<::prost::alloc::string::String>,
315    #[prost(bool, optional, tag = "13")]
316    pub checkout_token_required: ::core::option::Option<bool>,
317    #[prost(string, optional, tag = "14")]
318    pub base_checkout_url: ::core::option::Option<::prost::alloc::string::String>,
319    #[prost(string, repeated, tag = "37")]
320    pub tos_checkbox_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
321    #[prost(int32, optional, tag = "38")]
322    pub iab_permission_error: ::core::option::Option<i32>,
323    #[prost(message, optional, tag = "39")]
324    pub purchase_status_response: ::core::option::Option<PurchaseStatusResponse>,
325    #[prost(string, optional, tag = "46")]
326    pub purchase_cookie: ::core::option::Option<::prost::alloc::string::String>,
327    #[prost(message, optional, tag = "49")]
328    pub challenge: ::core::option::Option<Challenge>,
329    #[prost(string, optional, tag = "50")]
330    pub add_instrument_prompt_html: ::core::option::Option<
331        ::prost::alloc::string::String,
332    >,
333    #[prost(string, optional, tag = "51")]
334    pub confirm_button_text: ::core::option::Option<::prost::alloc::string::String>,
335    #[prost(string, optional, tag = "52")]
336    pub permission_error_title_text: ::core::option::Option<
337        ::prost::alloc::string::String,
338    >,
339    #[prost(string, optional, tag = "53")]
340    pub permission_error_message_text: ::core::option::Option<
341        ::prost::alloc::string::String,
342    >,
343    #[prost(bytes = "vec", optional, tag = "54")]
344    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
345    #[prost(string, optional, tag = "55")]
346    pub encoded_delivery_token: ::core::option::Option<::prost::alloc::string::String>,
347    #[prost(string, optional, tag = "56")]
348    pub unknown_token: ::core::option::Option<::prost::alloc::string::String>,
349}
350/// Nested message and enum types in `BuyResponse`.
351pub mod buy_response {
352    #[allow(clippy::derive_partial_eq_without_eq)]
353    #[derive(Clone, PartialEq, ::prost::Message)]
354    pub struct CheckoutInfo {
355        #[prost(message, optional, tag = "3")]
356        pub item: ::core::option::Option<super::LineItem>,
357        #[prost(message, repeated, tag = "4")]
358        pub sub_item: ::prost::alloc::vec::Vec<super::LineItem>,
359        #[prost(group, repeated, tag = "5")]
360        pub checkoutoption: ::prost::alloc::vec::Vec<checkout_info::CheckoutOption>,
361        #[prost(string, optional, tag = "10")]
362        pub deprecated_checkout_url: ::core::option::Option<
363            ::prost::alloc::string::String,
364        >,
365        #[prost(string, optional, tag = "11")]
366        pub add_instrument_url: ::core::option::Option<::prost::alloc::string::String>,
367        #[prost(string, repeated, tag = "20")]
368        pub footer_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
369        #[prost(int32, repeated, packed = "false", tag = "31")]
370        pub eligible_instrument_family: ::prost::alloc::vec::Vec<i32>,
371        #[prost(string, repeated, tag = "36")]
372        pub footnote_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
373        #[prost(message, repeated, tag = "44")]
374        pub eligible_instrument: ::prost::alloc::vec::Vec<super::Instrument>,
375    }
376    /// Nested message and enum types in `CheckoutInfo`.
377    pub mod checkout_info {
378        #[allow(clippy::derive_partial_eq_without_eq)]
379        #[derive(Clone, PartialEq, ::prost::Message)]
380        pub struct CheckoutOption {
381            #[prost(string, optional, tag = "6")]
382            pub form_of_payment: ::core::option::Option<::prost::alloc::string::String>,
383            #[prost(string, optional, tag = "7")]
384            pub encoded_adjusted_cart: ::core::option::Option<
385                ::prost::alloc::string::String,
386            >,
387            #[prost(string, optional, tag = "15")]
388            pub instrument_id: ::core::option::Option<::prost::alloc::string::String>,
389            #[prost(message, repeated, tag = "16")]
390            pub item: ::prost::alloc::vec::Vec<super::super::LineItem>,
391            #[prost(message, repeated, tag = "17")]
392            pub sub_item: ::prost::alloc::vec::Vec<super::super::LineItem>,
393            #[prost(message, optional, tag = "18")]
394            pub total: ::core::option::Option<super::super::LineItem>,
395            #[prost(string, repeated, tag = "19")]
396            pub footer_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
397            #[prost(int32, optional, tag = "29")]
398            pub instrument_family: ::core::option::Option<i32>,
399            #[prost(int32, repeated, packed = "false", tag = "30")]
400            pub deprecated_instrument_inapplicable_reason: ::prost::alloc::vec::Vec<i32>,
401            #[prost(bool, optional, tag = "32")]
402            pub selected_instrument: ::core::option::Option<bool>,
403            #[prost(message, optional, tag = "33")]
404            pub summary: ::core::option::Option<super::super::LineItem>,
405            #[prost(string, repeated, tag = "35")]
406            pub footnote_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
407            #[prost(message, optional, tag = "43")]
408            pub instrument: ::core::option::Option<super::super::Instrument>,
409            #[prost(string, optional, tag = "45")]
410            pub purchase_cookie: ::core::option::Option<::prost::alloc::string::String>,
411            #[prost(string, repeated, tag = "48")]
412            pub disabled_reason: ::prost::alloc::vec::Vec<
413                ::prost::alloc::string::String,
414            >,
415        }
416    }
417}
418#[allow(clippy::derive_partial_eq_without_eq)]
419#[derive(Clone, PartialEq, ::prost::Message)]
420pub struct LineItem {
421    #[prost(string, optional, tag = "1")]
422    pub name: ::core::option::Option<::prost::alloc::string::String>,
423    #[prost(string, optional, tag = "2")]
424    pub description: ::core::option::Option<::prost::alloc::string::String>,
425    #[prost(message, optional, tag = "3")]
426    pub offer: ::core::option::Option<Offer>,
427    #[prost(message, optional, tag = "4")]
428    pub amount: ::core::option::Option<Money>,
429}
430#[allow(clippy::derive_partial_eq_without_eq)]
431#[derive(Clone, PartialEq, ::prost::Message)]
432pub struct Money {
433    #[prost(int64, optional, tag = "1")]
434    pub micros: ::core::option::Option<i64>,
435    #[prost(string, optional, tag = "2")]
436    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
437    #[prost(string, optional, tag = "3")]
438    pub formatted_amount: ::core::option::Option<::prost::alloc::string::String>,
439}
440#[allow(clippy::derive_partial_eq_without_eq)]
441#[derive(Clone, PartialEq, ::prost::Message)]
442pub struct PurchaseNotificationResponse {
443    #[prost(int32, optional, tag = "1")]
444    pub status: ::core::option::Option<i32>,
445    #[prost(message, optional, tag = "2")]
446    pub debug_info: ::core::option::Option<DebugInfo>,
447    #[prost(string, optional, tag = "3")]
448    pub localized_error_message: ::core::option::Option<::prost::alloc::string::String>,
449    #[prost(string, optional, tag = "4")]
450    pub purchase_id: ::core::option::Option<::prost::alloc::string::String>,
451}
452#[allow(clippy::derive_partial_eq_without_eq)]
453#[derive(Clone, PartialEq, ::prost::Message)]
454pub struct PurchaseStatusResponse {
455    #[prost(int32, optional, tag = "1")]
456    pub status: ::core::option::Option<i32>,
457    #[prost(string, optional, tag = "2")]
458    pub status_msg: ::core::option::Option<::prost::alloc::string::String>,
459    #[prost(string, optional, tag = "3")]
460    pub status_title: ::core::option::Option<::prost::alloc::string::String>,
461    #[prost(string, optional, tag = "4")]
462    pub brief_message: ::core::option::Option<::prost::alloc::string::String>,
463    #[prost(string, optional, tag = "5")]
464    pub info_url: ::core::option::Option<::prost::alloc::string::String>,
465    #[prost(message, optional, tag = "6")]
466    pub library_update: ::core::option::Option<LibraryUpdate>,
467    #[prost(message, optional, tag = "7")]
468    pub rejected_instrument: ::core::option::Option<Instrument>,
469    #[prost(message, optional, tag = "8")]
470    pub app_delivery_data: ::core::option::Option<AndroidAppDeliveryData>,
471}
472#[allow(clippy::derive_partial_eq_without_eq)]
473#[derive(Clone, PartialEq, ::prost::Message)]
474pub struct PurchaseHistoryDetails {
475    #[prost(int64, optional, tag = "2")]
476    pub purchase_timestamp_millis: ::core::option::Option<i64>,
477    #[prost(string, optional, tag = "3")]
478    pub purchase_details_html: ::core::option::Option<::prost::alloc::string::String>,
479    #[prost(message, optional, tag = "5")]
480    pub offer: ::core::option::Option<Offer>,
481    #[prost(string, optional, tag = "6")]
482    pub purchase_status: ::core::option::Option<::prost::alloc::string::String>,
483    #[prost(string, optional, tag = "7")]
484    pub title_byline_html: ::core::option::Option<::prost::alloc::string::String>,
485    #[prost(bytes = "vec", optional, tag = "8")]
486    pub client_refund_context: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
487    #[prost(message, optional, tag = "9")]
488    pub purchase_details_image: ::core::option::Option<Image>,
489}
490#[allow(clippy::derive_partial_eq_without_eq)]
491#[derive(Clone, PartialEq, ::prost::Message)]
492pub struct BillingProfileResponse {
493    #[prost(int32, optional, tag = "1")]
494    pub result: ::core::option::Option<i32>,
495    #[prost(message, optional, tag = "2")]
496    pub billing_profile: ::core::option::Option<BillingProfile>,
497    #[prost(string, optional, tag = "3")]
498    pub user_message_html: ::core::option::Option<::prost::alloc::string::String>,
499}
500#[allow(clippy::derive_partial_eq_without_eq)]
501#[derive(Clone, PartialEq, ::prost::Message)]
502pub struct CheckInstrumentResponse {
503    #[prost(bool, optional, tag = "1")]
504    pub user_has_valid_instrument: ::core::option::Option<bool>,
505    #[prost(bool, optional, tag = "2")]
506    pub checkout_token_required: ::core::option::Option<bool>,
507    #[prost(message, repeated, tag = "4")]
508    pub instrument: ::prost::alloc::vec::Vec<Instrument>,
509    #[prost(message, repeated, tag = "5")]
510    pub eligible_instrument: ::prost::alloc::vec::Vec<Instrument>,
511}
512#[allow(clippy::derive_partial_eq_without_eq)]
513#[derive(Clone, PartialEq, ::prost::Message)]
514pub struct InstrumentSetupInfoResponse {
515    #[prost(message, repeated, tag = "1")]
516    pub setup_info: ::prost::alloc::vec::Vec<InstrumentSetupInfo>,
517    #[prost(bool, optional, tag = "2")]
518    pub checkout_token_required: ::core::option::Option<bool>,
519}
520#[allow(clippy::derive_partial_eq_without_eq)]
521#[derive(Clone, PartialEq, ::prost::Message)]
522pub struct RedeemGiftCardRequest {
523    #[prost(string, optional, tag = "1")]
524    pub gift_card_pin: ::core::option::Option<::prost::alloc::string::String>,
525    #[prost(message, optional, tag = "2")]
526    pub address: ::core::option::Option<Address>,
527    #[prost(string, repeated, tag = "3")]
528    pub accepted_legal_document_id: ::prost::alloc::vec::Vec<
529        ::prost::alloc::string::String,
530    >,
531    #[prost(string, optional, tag = "4")]
532    pub checkout_token: ::core::option::Option<::prost::alloc::string::String>,
533}
534#[allow(clippy::derive_partial_eq_without_eq)]
535#[derive(Clone, PartialEq, ::prost::Message)]
536pub struct RedeemGiftCardResponse {
537    #[prost(int32, optional, tag = "1")]
538    pub result: ::core::option::Option<i32>,
539    #[prost(string, optional, tag = "2")]
540    pub user_message_html: ::core::option::Option<::prost::alloc::string::String>,
541    #[prost(string, optional, tag = "3")]
542    pub balance_html: ::core::option::Option<::prost::alloc::string::String>,
543    #[prost(message, optional, tag = "4")]
544    pub address_challenge: ::core::option::Option<AddressChallenge>,
545    #[prost(bool, optional, tag = "5")]
546    pub checkout_token_required: ::core::option::Option<bool>,
547}
548#[allow(clippy::derive_partial_eq_without_eq)]
549#[derive(Clone, PartialEq, ::prost::Message)]
550pub struct UpdateInstrumentRequest {
551    #[prost(message, optional, tag = "1")]
552    pub instrument: ::core::option::Option<Instrument>,
553    #[prost(string, optional, tag = "2")]
554    pub checkout_token: ::core::option::Option<::prost::alloc::string::String>,
555}
556#[allow(clippy::derive_partial_eq_without_eq)]
557#[derive(Clone, PartialEq, ::prost::Message)]
558pub struct UpdateInstrumentResponse {
559    #[prost(int32, optional, tag = "1")]
560    pub result: ::core::option::Option<i32>,
561    #[prost(string, optional, tag = "2")]
562    pub instrument_id: ::core::option::Option<::prost::alloc::string::String>,
563    #[prost(string, optional, tag = "3")]
564    pub user_message_html: ::core::option::Option<::prost::alloc::string::String>,
565    #[prost(message, repeated, tag = "4")]
566    pub error_input_field: ::prost::alloc::vec::Vec<InputValidationError>,
567    #[prost(bool, optional, tag = "5")]
568    pub checkout_token_required: ::core::option::Option<bool>,
569    #[prost(message, optional, tag = "6")]
570    pub redeemed_offer: ::core::option::Option<RedeemedPromoOffer>,
571}
572#[allow(clippy::derive_partial_eq_without_eq)]
573#[derive(Clone, PartialEq, ::prost::Message)]
574pub struct InitiateAssociationResponse {
575    #[prost(string, optional, tag = "1")]
576    pub user_token: ::core::option::Option<::prost::alloc::string::String>,
577}
578#[allow(clippy::derive_partial_eq_without_eq)]
579#[derive(Clone, PartialEq, ::prost::Message)]
580pub struct VerifyAssociationResponse {
581    #[prost(int32, optional, tag = "1")]
582    pub status: ::core::option::Option<i32>,
583    #[prost(message, optional, tag = "2")]
584    pub billing_address: ::core::option::Option<Address>,
585    #[prost(message, optional, tag = "3")]
586    pub carrier_tos: ::core::option::Option<CarrierTos>,
587    #[prost(string, optional, tag = "4")]
588    pub carrier_error_message: ::core::option::Option<::prost::alloc::string::String>,
589}
590#[allow(clippy::derive_partial_eq_without_eq)]
591#[derive(Clone, PartialEq, ::prost::Message)]
592pub struct AddressChallenge {
593    #[prost(string, optional, tag = "1")]
594    pub response_address_param: ::core::option::Option<::prost::alloc::string::String>,
595    #[prost(string, optional, tag = "2")]
596    pub response_checkboxes_param: ::core::option::Option<
597        ::prost::alloc::string::String,
598    >,
599    #[prost(string, optional, tag = "3")]
600    pub title: ::core::option::Option<::prost::alloc::string::String>,
601    #[prost(string, optional, tag = "4")]
602    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
603    #[prost(message, repeated, tag = "5")]
604    pub checkbox: ::prost::alloc::vec::Vec<FormCheckbox>,
605    #[prost(message, optional, tag = "6")]
606    pub address: ::core::option::Option<Address>,
607    #[prost(message, repeated, tag = "7")]
608    pub error_input_field: ::prost::alloc::vec::Vec<InputValidationError>,
609    #[prost(string, optional, tag = "8")]
610    pub error_html: ::core::option::Option<::prost::alloc::string::String>,
611    #[prost(int32, repeated, packed = "false", tag = "9")]
612    pub required_field: ::prost::alloc::vec::Vec<i32>,
613    #[prost(message, repeated, tag = "10")]
614    pub supported_country: ::prost::alloc::vec::Vec<Country>,
615}
616#[allow(clippy::derive_partial_eq_without_eq)]
617#[derive(Clone, PartialEq, ::prost::Message)]
618pub struct AuthenticationChallenge {
619    #[prost(int32, optional, tag = "1")]
620    pub authentication_type: ::core::option::Option<i32>,
621    #[prost(string, optional, tag = "2")]
622    pub response_authentication_type_param: ::core::option::Option<
623        ::prost::alloc::string::String,
624    >,
625    #[prost(string, optional, tag = "3")]
626    pub response_retry_count_param: ::core::option::Option<
627        ::prost::alloc::string::String,
628    >,
629    #[prost(string, optional, tag = "4")]
630    pub pin_header_text: ::core::option::Option<::prost::alloc::string::String>,
631    #[prost(string, optional, tag = "5")]
632    pub pin_description_text_html: ::core::option::Option<
633        ::prost::alloc::string::String,
634    >,
635    #[prost(string, optional, tag = "6")]
636    pub gaia_header_text: ::core::option::Option<::prost::alloc::string::String>,
637    #[prost(string, optional, tag = "7")]
638    pub gaia_description_text_html: ::core::option::Option<
639        ::prost::alloc::string::String,
640    >,
641    #[prost(string, optional, tag = "8")]
642    pub gaia_footer_text_html: ::core::option::Option<::prost::alloc::string::String>,
643    #[prost(message, optional, tag = "9")]
644    pub gaia_opt_out_checkbox: ::core::option::Option<FormCheckbox>,
645    #[prost(string, optional, tag = "10")]
646    pub gaia_opt_out_description_text_html: ::core::option::Option<
647        ::prost::alloc::string::String,
648    >,
649}
650#[allow(clippy::derive_partial_eq_without_eq)]
651#[derive(Clone, PartialEq, ::prost::Message)]
652pub struct Challenge {
653    #[prost(message, optional, tag = "1")]
654    pub address_challenge: ::core::option::Option<AddressChallenge>,
655    #[prost(message, optional, tag = "2")]
656    pub authentication_challenge: ::core::option::Option<AuthenticationChallenge>,
657    #[prost(message, optional, tag = "3")]
658    pub web_view_challenge: ::core::option::Option<WebViewChallenge>,
659}
660#[allow(clippy::derive_partial_eq_without_eq)]
661#[derive(Clone, PartialEq, ::prost::Message)]
662pub struct Country {
663    #[prost(string, optional, tag = "1")]
664    pub region_code: ::core::option::Option<::prost::alloc::string::String>,
665    #[prost(string, optional, tag = "2")]
666    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
667}
668#[allow(clippy::derive_partial_eq_without_eq)]
669#[derive(Clone, PartialEq, ::prost::Message)]
670pub struct FormCheckbox {
671    #[prost(string, optional, tag = "1")]
672    pub description: ::core::option::Option<::prost::alloc::string::String>,
673    #[prost(bool, optional, tag = "2")]
674    pub checked: ::core::option::Option<bool>,
675    #[prost(bool, optional, tag = "3")]
676    pub required: ::core::option::Option<bool>,
677    #[prost(string, optional, tag = "4")]
678    pub id: ::core::option::Option<::prost::alloc::string::String>,
679}
680#[allow(clippy::derive_partial_eq_without_eq)]
681#[derive(Clone, PartialEq, ::prost::Message)]
682pub struct InputValidationError {
683    #[prost(int32, optional, tag = "1")]
684    pub input_field: ::core::option::Option<i32>,
685    #[prost(string, optional, tag = "2")]
686    pub error_message: ::core::option::Option<::prost::alloc::string::String>,
687}
688#[allow(clippy::derive_partial_eq_without_eq)]
689#[derive(Clone, PartialEq, ::prost::Message)]
690pub struct WebViewChallenge {
691    #[prost(string, optional, tag = "1")]
692    pub start_url: ::core::option::Option<::prost::alloc::string::String>,
693    #[prost(string, optional, tag = "2")]
694    pub target_url_regexp: ::core::option::Option<::prost::alloc::string::String>,
695    #[prost(string, optional, tag = "3")]
696    pub cancel_button_display_label: ::core::option::Option<
697        ::prost::alloc::string::String,
698    >,
699    #[prost(string, optional, tag = "4")]
700    pub response_target_url_param: ::core::option::Option<
701        ::prost::alloc::string::String,
702    >,
703    #[prost(string, optional, tag = "5")]
704    pub cancel_url_regexp: ::core::option::Option<::prost::alloc::string::String>,
705    #[prost(string, optional, tag = "6")]
706    pub title: ::core::option::Option<::prost::alloc::string::String>,
707}
708#[allow(clippy::derive_partial_eq_without_eq)]
709#[derive(Clone, PartialEq, ::prost::Message)]
710pub struct AddCreditCardPromoOffer {
711    #[prost(string, optional, tag = "1")]
712    pub header_text: ::core::option::Option<::prost::alloc::string::String>,
713    #[prost(string, optional, tag = "2")]
714    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
715    #[prost(message, optional, tag = "3")]
716    pub image: ::core::option::Option<Image>,
717    #[prost(string, optional, tag = "4")]
718    pub introductory_text_html: ::core::option::Option<::prost::alloc::string::String>,
719    #[prost(string, optional, tag = "5")]
720    pub offer_title: ::core::option::Option<::prost::alloc::string::String>,
721    #[prost(string, optional, tag = "6")]
722    pub no_action_description: ::core::option::Option<::prost::alloc::string::String>,
723    #[prost(string, optional, tag = "7")]
724    pub terms_and_conditions_html: ::core::option::Option<
725        ::prost::alloc::string::String,
726    >,
727}
728#[allow(clippy::derive_partial_eq_without_eq)]
729#[derive(Clone, PartialEq, ::prost::Message)]
730pub struct AvailablePromoOffer {
731    #[prost(message, optional, tag = "1")]
732    pub add_credit_card_offer: ::core::option::Option<AddCreditCardPromoOffer>,
733}
734#[allow(clippy::derive_partial_eq_without_eq)]
735#[derive(Clone, PartialEq, ::prost::Message)]
736pub struct CheckPromoOfferResponse {
737    #[prost(message, repeated, tag = "1")]
738    pub available_offer: ::prost::alloc::vec::Vec<AvailablePromoOffer>,
739    #[prost(message, optional, tag = "2")]
740    pub redeemed_offer: ::core::option::Option<RedeemedPromoOffer>,
741    #[prost(bool, optional, tag = "3")]
742    pub checkout_token_required: ::core::option::Option<bool>,
743}
744#[allow(clippy::derive_partial_eq_without_eq)]
745#[derive(Clone, PartialEq, ::prost::Message)]
746pub struct RedeemedPromoOffer {
747    #[prost(string, optional, tag = "1")]
748    pub header_text: ::core::option::Option<::prost::alloc::string::String>,
749    #[prost(string, optional, tag = "2")]
750    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
751    #[prost(message, optional, tag = "3")]
752    pub image: ::core::option::Option<Image>,
753}
754#[allow(clippy::derive_partial_eq_without_eq)]
755#[derive(Clone, PartialEq, ::prost::Message)]
756pub struct DocId {
757    #[prost(string, optional, tag = "1")]
758    pub backend_doc_id: ::core::option::Option<::prost::alloc::string::String>,
759    #[prost(int32, optional, tag = "2", default = "1")]
760    pub r#type: ::core::option::Option<i32>,
761    #[prost(int32, optional, tag = "3")]
762    pub backend: ::core::option::Option<i32>,
763}
764#[allow(clippy::derive_partial_eq_without_eq)]
765#[derive(Clone, Copy, PartialEq, ::prost::Message)]
766pub struct Install {
767    #[prost(fixed64, optional, tag = "1")]
768    pub android_id: ::core::option::Option<u64>,
769    #[prost(int32, optional, tag = "2")]
770    pub version: ::core::option::Option<i32>,
771    #[prost(bool, optional, tag = "3")]
772    pub bundled: ::core::option::Option<bool>,
773    #[prost(bool, optional, tag = "4")]
774    pub pending: ::core::option::Option<bool>,
775    #[prost(int64, optional, tag = "5")]
776    pub last_updated: ::core::option::Option<i64>,
777}
778#[allow(clippy::derive_partial_eq_without_eq)]
779#[derive(Clone, PartialEq, ::prost::Message)]
780pub struct GroupLicenseKey {
781    #[prost(fixed64, optional, tag = "1")]
782    pub dasher_customer_id: ::core::option::Option<u64>,
783    #[prost(message, optional, tag = "2")]
784    pub doc_id: ::core::option::Option<DocId>,
785    #[prost(int32, optional, tag = "3", default = "1")]
786    pub licensed_offer_type: ::core::option::Option<i32>,
787    #[prost(int32, optional, tag = "4")]
788    pub r#type: ::core::option::Option<i32>,
789    #[prost(int32, optional, tag = "5")]
790    pub rental_period_days: ::core::option::Option<i32>,
791}
792#[allow(clippy::derive_partial_eq_without_eq)]
793#[derive(Clone, PartialEq, ::prost::Message)]
794pub struct LicenseTerms {
795    #[prost(message, optional, tag = "1")]
796    pub group_license_key: ::core::option::Option<GroupLicenseKey>,
797}
798#[allow(clippy::derive_partial_eq_without_eq)]
799#[derive(Clone, PartialEq, ::prost::Message)]
800pub struct Offer {
801    #[prost(int64, optional, tag = "1")]
802    pub micros: ::core::option::Option<i64>,
803    #[prost(string, optional, tag = "2")]
804    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
805    #[prost(string, optional, tag = "3")]
806    pub formatted_amount: ::core::option::Option<::prost::alloc::string::String>,
807    #[prost(message, repeated, tag = "4")]
808    pub converted_price: ::prost::alloc::vec::Vec<Offer>,
809    #[prost(bool, optional, tag = "5")]
810    pub checkout_flow_required: ::core::option::Option<bool>,
811    #[prost(int64, optional, tag = "6")]
812    pub full_price_micros: ::core::option::Option<i64>,
813    #[prost(string, optional, tag = "7")]
814    pub formatted_full_amount: ::core::option::Option<::prost::alloc::string::String>,
815    #[prost(int32, optional, tag = "8", default = "1")]
816    pub offer_type: ::core::option::Option<i32>,
817    #[prost(message, optional, tag = "9")]
818    pub rental_terms: ::core::option::Option<RentalTerms>,
819    #[prost(int64, optional, tag = "10")]
820    pub on_sale_date: ::core::option::Option<i64>,
821    #[prost(string, repeated, tag = "11")]
822    pub promotion_label: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
823    #[prost(message, optional, tag = "12")]
824    pub subscription_terms: ::core::option::Option<SubscriptionTerms>,
825    #[prost(string, optional, tag = "13")]
826    pub formatted_name: ::core::option::Option<::prost::alloc::string::String>,
827    #[prost(string, optional, tag = "14")]
828    pub formatted_description: ::core::option::Option<::prost::alloc::string::String>,
829    #[prost(bool, optional, tag = "15")]
830    pub preorder: ::core::option::Option<bool>,
831    #[prost(int32, optional, tag = "16")]
832    pub on_sale_date_display_time_zone_offset_millis: ::core::option::Option<i32>,
833    #[prost(int32, optional, tag = "17")]
834    pub licensed_offer_type: ::core::option::Option<i32>,
835    #[prost(message, optional, tag = "18")]
836    pub subscription_content_terms: ::core::option::Option<SubscriptionContentTerms>,
837    #[prost(string, optional, tag = "19")]
838    pub offer_id: ::core::option::Option<::prost::alloc::string::String>,
839    #[prost(int64, optional, tag = "20")]
840    pub preorder_fulfillment_display_date: ::core::option::Option<i64>,
841    #[prost(message, optional, tag = "21")]
842    pub license_terms: ::core::option::Option<LicenseTerms>,
843    #[prost(bool, optional, tag = "22")]
844    pub sale: ::core::option::Option<bool>,
845    #[prost(message, optional, tag = "23")]
846    pub voucher_terms: ::core::option::Option<VoucherTerms>,
847    #[prost(message, repeated, tag = "24")]
848    pub offer_payment: ::prost::alloc::vec::Vec<OfferPayment>,
849    #[prost(bool, optional, tag = "25")]
850    pub repeat_last_payment: ::core::option::Option<bool>,
851    #[prost(string, optional, tag = "26")]
852    pub buy_button_label: ::core::option::Option<::prost::alloc::string::String>,
853    #[prost(bool, optional, tag = "27")]
854    pub instant_purchase_enabled: ::core::option::Option<bool>,
855    #[prost(int64, optional, tag = "30")]
856    pub sale_end_timestamp: ::core::option::Option<i64>,
857    #[prost(string, optional, tag = "31")]
858    pub sale_message: ::core::option::Option<::prost::alloc::string::String>,
859}
860#[allow(clippy::derive_partial_eq_without_eq)]
861#[derive(Clone, Copy, PartialEq, ::prost::Message)]
862pub struct MonthAndDay {
863    #[prost(uint32, optional, tag = "1")]
864    pub month: ::core::option::Option<u32>,
865    #[prost(uint32, optional, tag = "2")]
866    pub day: ::core::option::Option<u32>,
867}
868#[allow(clippy::derive_partial_eq_without_eq)]
869#[derive(Clone, Copy, PartialEq, ::prost::Message)]
870pub struct OfferPaymentPeriod {
871    #[prost(message, optional, tag = "1")]
872    pub duration: ::core::option::Option<TimePeriod>,
873    #[prost(message, optional, tag = "2")]
874    pub start: ::core::option::Option<MonthAndDay>,
875    #[prost(message, optional, tag = "3")]
876    pub end: ::core::option::Option<MonthAndDay>,
877}
878#[allow(clippy::derive_partial_eq_without_eq)]
879#[derive(Clone, Copy, PartialEq, ::prost::Message)]
880pub struct OfferPaymentOverride {
881    #[prost(int64, optional, tag = "1")]
882    pub micros: ::core::option::Option<i64>,
883    #[prost(message, optional, tag = "2")]
884    pub start: ::core::option::Option<MonthAndDay>,
885    #[prost(message, optional, tag = "3")]
886    pub end: ::core::option::Option<MonthAndDay>,
887}
888#[allow(clippy::derive_partial_eq_without_eq)]
889#[derive(Clone, PartialEq, ::prost::Message)]
890pub struct OfferPayment {
891    #[prost(int64, optional, tag = "1")]
892    pub micros: ::core::option::Option<i64>,
893    #[prost(string, optional, tag = "2")]
894    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
895    #[prost(message, optional, tag = "3")]
896    pub offer_payment_period: ::core::option::Option<OfferPaymentPeriod>,
897    #[prost(message, repeated, tag = "4")]
898    pub offer_payment_override: ::prost::alloc::vec::Vec<OfferPaymentOverride>,
899}
900#[allow(clippy::derive_partial_eq_without_eq)]
901#[derive(Clone, Copy, PartialEq, ::prost::Message)]
902pub struct VoucherTerms {}
903#[allow(clippy::derive_partial_eq_without_eq)]
904#[derive(Clone, Copy, PartialEq, ::prost::Message)]
905pub struct RentalTerms {
906    #[prost(int32, optional, tag = "1")]
907    pub d_eprecated_grant_period_seconds: ::core::option::Option<i32>,
908    #[prost(int32, optional, tag = "2")]
909    pub d_eprecated_activate_period_seconds: ::core::option::Option<i32>,
910    #[prost(message, optional, tag = "3")]
911    pub grant_period: ::core::option::Option<TimePeriod>,
912    #[prost(message, optional, tag = "4")]
913    pub activate_period: ::core::option::Option<TimePeriod>,
914}
915#[allow(clippy::derive_partial_eq_without_eq)]
916#[derive(Clone, PartialEq, ::prost::Message)]
917pub struct SignedData {
918    #[prost(string, optional, tag = "1")]
919    pub signed_data: ::core::option::Option<::prost::alloc::string::String>,
920    #[prost(string, optional, tag = "2")]
921    pub signature: ::core::option::Option<::prost::alloc::string::String>,
922}
923#[allow(clippy::derive_partial_eq_without_eq)]
924#[derive(Clone, PartialEq, ::prost::Message)]
925pub struct SubscriptionContentTerms {
926    #[prost(message, optional, tag = "1")]
927    pub required_subscription: ::core::option::Option<DocId>,
928}
929#[allow(clippy::derive_partial_eq_without_eq)]
930#[derive(Clone, Copy, PartialEq, ::prost::Message)]
931pub struct GroupLicenseInfo {
932    #[prost(int32, optional, tag = "1")]
933    pub licensed_offer_type: ::core::option::Option<i32>,
934    #[prost(fixed64, optional, tag = "2")]
935    pub gaia_group_id: ::core::option::Option<u64>,
936}
937#[allow(clippy::derive_partial_eq_without_eq)]
938#[derive(Clone, PartialEq, ::prost::Message)]
939pub struct LicensedDocumentInfo {
940    #[prost(fixed64, repeated, packed = "false", tag = "1")]
941    pub gaia_group_id: ::prost::alloc::vec::Vec<u64>,
942}
943#[allow(clippy::derive_partial_eq_without_eq)]
944#[derive(Clone, PartialEq, ::prost::Message)]
945pub struct OwnershipInfo {
946    #[prost(int64, optional, tag = "1")]
947    pub initiation_timestamp: ::core::option::Option<i64>,
948    #[prost(int64, optional, tag = "2")]
949    pub valid_until_timestamp: ::core::option::Option<i64>,
950    #[prost(bool, optional, tag = "3")]
951    pub auto_renewing: ::core::option::Option<bool>,
952    #[prost(int64, optional, tag = "4")]
953    pub refund_timeout_timestamp: ::core::option::Option<i64>,
954    #[prost(int64, optional, tag = "5")]
955    pub post_delivery_refund_window_millis: ::core::option::Option<i64>,
956    #[prost(message, optional, tag = "6")]
957    pub developer_purchase_info: ::core::option::Option<SignedData>,
958    #[prost(bool, optional, tag = "7")]
959    pub pre_ordered: ::core::option::Option<bool>,
960    #[prost(bool, optional, tag = "8")]
961    pub hidden: ::core::option::Option<bool>,
962    #[prost(message, optional, tag = "9")]
963    pub rental_terms: ::core::option::Option<RentalTerms>,
964    #[prost(message, optional, tag = "10")]
965    pub group_license_info: ::core::option::Option<GroupLicenseInfo>,
966    #[prost(message, optional, tag = "11")]
967    pub licensed_document_info: ::core::option::Option<LicensedDocumentInfo>,
968    #[prost(int32, optional, tag = "12")]
969    pub quantity: ::core::option::Option<i32>,
970    #[prost(int64, optional, tag = "14")]
971    pub library_expiration_timestamp: ::core::option::Option<i64>,
972}
973#[allow(clippy::derive_partial_eq_without_eq)]
974#[derive(Clone, Copy, PartialEq, ::prost::Message)]
975pub struct SubscriptionTerms {
976    #[prost(message, optional, tag = "1")]
977    pub recurring_period: ::core::option::Option<TimePeriod>,
978    #[prost(message, optional, tag = "2")]
979    pub trial_period: ::core::option::Option<TimePeriod>,
980}
981#[allow(clippy::derive_partial_eq_without_eq)]
982#[derive(Clone, Copy, PartialEq, ::prost::Message)]
983pub struct TimePeriod {
984    #[prost(int32, optional, tag = "1")]
985    pub unit: ::core::option::Option<i32>,
986    #[prost(int32, optional, tag = "2")]
987    pub count: ::core::option::Option<i32>,
988}
989#[allow(clippy::derive_partial_eq_without_eq)]
990#[derive(Clone, PartialEq, ::prost::Message)]
991pub struct BillingAddressSpec {
992    #[prost(int32, optional, tag = "1")]
993    pub billing_address_type: ::core::option::Option<i32>,
994    #[prost(int32, repeated, packed = "false", tag = "2")]
995    pub required_field: ::prost::alloc::vec::Vec<i32>,
996}
997#[allow(clippy::derive_partial_eq_without_eq)]
998#[derive(Clone, PartialEq, ::prost::Message)]
999pub struct BillingProfile {
1000    #[prost(message, repeated, tag = "1")]
1001    pub instrument: ::prost::alloc::vec::Vec<Instrument>,
1002    #[prost(string, optional, tag = "2")]
1003    pub selected_external_instrument_id: ::core::option::Option<
1004        ::prost::alloc::string::String,
1005    >,
1006    #[prost(message, repeated, tag = "3")]
1007    pub billing_profile_option: ::prost::alloc::vec::Vec<BillingProfileOption>,
1008}
1009#[allow(clippy::derive_partial_eq_without_eq)]
1010#[derive(Clone, PartialEq, ::prost::Message)]
1011pub struct BillingProfileOption {
1012    #[prost(int32, optional, tag = "1")]
1013    pub r#type: ::core::option::Option<i32>,
1014    #[prost(string, optional, tag = "2")]
1015    pub display_title: ::core::option::Option<::prost::alloc::string::String>,
1016    #[prost(string, optional, tag = "3")]
1017    pub external_instrument_id: ::core::option::Option<::prost::alloc::string::String>,
1018    #[prost(message, optional, tag = "4")]
1019    pub topup_info: ::core::option::Option<TopupInfo>,
1020    #[prost(message, optional, tag = "5")]
1021    pub carrier_billing_instrument_status: ::core::option::Option<
1022        CarrierBillingInstrumentStatus,
1023    >,
1024}
1025#[allow(clippy::derive_partial_eq_without_eq)]
1026#[derive(Clone, PartialEq, ::prost::Message)]
1027pub struct CarrierBillingCredentials {
1028    #[prost(string, optional, tag = "1")]
1029    pub value: ::core::option::Option<::prost::alloc::string::String>,
1030    #[prost(int64, optional, tag = "2")]
1031    pub expiration: ::core::option::Option<i64>,
1032}
1033#[allow(clippy::derive_partial_eq_without_eq)]
1034#[derive(Clone, PartialEq, ::prost::Message)]
1035pub struct CarrierBillingInstrument {
1036    #[prost(string, optional, tag = "1")]
1037    pub instrument_key: ::core::option::Option<::prost::alloc::string::String>,
1038    #[prost(string, optional, tag = "2")]
1039    pub account_type: ::core::option::Option<::prost::alloc::string::String>,
1040    #[prost(string, optional, tag = "3")]
1041    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
1042    #[prost(int64, optional, tag = "4")]
1043    pub transaction_limit: ::core::option::Option<i64>,
1044    #[prost(string, optional, tag = "5")]
1045    pub subscriber_identifier: ::core::option::Option<::prost::alloc::string::String>,
1046    #[prost(message, optional, tag = "6")]
1047    pub encrypted_subscriber_info: ::core::option::Option<EncryptedSubscriberInfo>,
1048    #[prost(message, optional, tag = "7")]
1049    pub credentials: ::core::option::Option<CarrierBillingCredentials>,
1050    #[prost(message, optional, tag = "8")]
1051    pub accepted_carrier_tos: ::core::option::Option<CarrierTos>,
1052}
1053#[allow(clippy::derive_partial_eq_without_eq)]
1054#[derive(Clone, PartialEq, ::prost::Message)]
1055pub struct CarrierBillingInstrumentStatus {
1056    #[prost(message, optional, tag = "1")]
1057    pub carrier_tos: ::core::option::Option<CarrierTos>,
1058    #[prost(bool, optional, tag = "2")]
1059    pub association_required: ::core::option::Option<bool>,
1060    #[prost(bool, optional, tag = "3")]
1061    pub password_required: ::core::option::Option<bool>,
1062    #[prost(message, optional, tag = "4")]
1063    pub carrier_password_prompt: ::core::option::Option<PasswordPrompt>,
1064    #[prost(int32, optional, tag = "5")]
1065    pub api_version: ::core::option::Option<i32>,
1066    #[prost(string, optional, tag = "6")]
1067    pub name: ::core::option::Option<::prost::alloc::string::String>,
1068    #[prost(message, optional, tag = "7")]
1069    pub device_association: ::core::option::Option<DeviceAssociation>,
1070    #[prost(string, optional, tag = "8")]
1071    pub carrier_support_phone_number: ::core::option::Option<
1072        ::prost::alloc::string::String,
1073    >,
1074}
1075#[allow(clippy::derive_partial_eq_without_eq)]
1076#[derive(Clone, PartialEq, ::prost::Message)]
1077pub struct CarrierTos {
1078    #[prost(message, optional, tag = "1")]
1079    pub dcb_tos: ::core::option::Option<CarrierTosEntry>,
1080    #[prost(message, optional, tag = "2")]
1081    pub pii_tos: ::core::option::Option<CarrierTosEntry>,
1082    #[prost(bool, optional, tag = "3")]
1083    pub needs_dcb_tos_acceptance: ::core::option::Option<bool>,
1084    #[prost(bool, optional, tag = "4")]
1085    pub needs_pii_tos_acceptance: ::core::option::Option<bool>,
1086}
1087#[allow(clippy::derive_partial_eq_without_eq)]
1088#[derive(Clone, PartialEq, ::prost::Message)]
1089pub struct CarrierTosEntry {
1090    #[prost(string, optional, tag = "1")]
1091    pub url: ::core::option::Option<::prost::alloc::string::String>,
1092    #[prost(string, optional, tag = "2")]
1093    pub version: ::core::option::Option<::prost::alloc::string::String>,
1094}
1095#[allow(clippy::derive_partial_eq_without_eq)]
1096#[derive(Clone, PartialEq, ::prost::Message)]
1097pub struct CreditCardInstrument {
1098    #[prost(int32, optional, tag = "1")]
1099    pub r#type: ::core::option::Option<i32>,
1100    #[prost(string, optional, tag = "2")]
1101    pub escrow_handle: ::core::option::Option<::prost::alloc::string::String>,
1102    #[prost(string, optional, tag = "3")]
1103    pub last_digits: ::core::option::Option<::prost::alloc::string::String>,
1104    #[prost(int32, optional, tag = "4")]
1105    pub expiration_month: ::core::option::Option<i32>,
1106    #[prost(int32, optional, tag = "5")]
1107    pub expiration_year: ::core::option::Option<i32>,
1108    #[prost(message, repeated, tag = "6")]
1109    pub escrow_efe_param: ::prost::alloc::vec::Vec<EfeParam>,
1110}
1111#[allow(clippy::derive_partial_eq_without_eq)]
1112#[derive(Clone, PartialEq, ::prost::Message)]
1113pub struct DeviceAssociation {
1114    #[prost(string, optional, tag = "1")]
1115    pub user_token_request_message: ::core::option::Option<
1116        ::prost::alloc::string::String,
1117    >,
1118    #[prost(string, optional, tag = "2")]
1119    pub user_token_request_address: ::core::option::Option<
1120        ::prost::alloc::string::String,
1121    >,
1122}
1123#[allow(clippy::derive_partial_eq_without_eq)]
1124#[derive(Clone, PartialEq, ::prost::Message)]
1125pub struct DisabledInfo {
1126    #[prost(int32, optional, tag = "1")]
1127    pub disabled_reason: ::core::option::Option<i32>,
1128    #[prost(string, optional, tag = "2")]
1129    pub disabled_message_html: ::core::option::Option<::prost::alloc::string::String>,
1130    #[prost(string, optional, tag = "3")]
1131    pub error_message: ::core::option::Option<::prost::alloc::string::String>,
1132}
1133#[allow(clippy::derive_partial_eq_without_eq)]
1134#[derive(Clone, PartialEq, ::prost::Message)]
1135pub struct EfeParam {
1136    #[prost(int32, optional, tag = "1")]
1137    pub key: ::core::option::Option<i32>,
1138    #[prost(string, optional, tag = "2")]
1139    pub value: ::core::option::Option<::prost::alloc::string::String>,
1140}
1141#[allow(clippy::derive_partial_eq_without_eq)]
1142#[derive(Clone, PartialEq, ::prost::Message)]
1143pub struct Instrument {
1144    #[prost(string, optional, tag = "1")]
1145    pub instrument_id: ::core::option::Option<::prost::alloc::string::String>,
1146    #[prost(message, optional, tag = "2")]
1147    pub billing_address: ::core::option::Option<Address>,
1148    #[prost(message, optional, tag = "3")]
1149    pub credit_card: ::core::option::Option<CreditCardInstrument>,
1150    #[prost(message, optional, tag = "4")]
1151    pub carrier_billing: ::core::option::Option<CarrierBillingInstrument>,
1152    #[prost(message, optional, tag = "5")]
1153    pub billing_address_spec: ::core::option::Option<BillingAddressSpec>,
1154    #[prost(int32, optional, tag = "6")]
1155    pub instrument_family: ::core::option::Option<i32>,
1156    #[prost(message, optional, tag = "7")]
1157    pub carrier_billing_status: ::core::option::Option<CarrierBillingInstrumentStatus>,
1158    #[prost(string, optional, tag = "8")]
1159    pub display_title: ::core::option::Option<::prost::alloc::string::String>,
1160    #[prost(message, optional, tag = "9")]
1161    pub topup_info_deprecated: ::core::option::Option<TopupInfo>,
1162    #[prost(int32, optional, tag = "10")]
1163    pub version: ::core::option::Option<i32>,
1164    #[prost(message, optional, tag = "11")]
1165    pub stored_value: ::core::option::Option<StoredValueInstrument>,
1166    #[prost(message, repeated, tag = "12")]
1167    pub disabled_info: ::prost::alloc::vec::Vec<DisabledInfo>,
1168}
1169#[allow(clippy::derive_partial_eq_without_eq)]
1170#[derive(Clone, PartialEq, ::prost::Message)]
1171pub struct InstrumentSetupInfo {
1172    #[prost(int32, optional, tag = "1")]
1173    pub instrument_family: ::core::option::Option<i32>,
1174    #[prost(bool, optional, tag = "2")]
1175    pub supported: ::core::option::Option<bool>,
1176    #[prost(message, optional, tag = "3")]
1177    pub address_challenge: ::core::option::Option<AddressChallenge>,
1178    #[prost(message, optional, tag = "4")]
1179    pub balance: ::core::option::Option<Money>,
1180    #[prost(string, repeated, tag = "5")]
1181    pub footer_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1182}
1183#[allow(clippy::derive_partial_eq_without_eq)]
1184#[derive(Clone, PartialEq, ::prost::Message)]
1185pub struct PasswordPrompt {
1186    #[prost(string, optional, tag = "1")]
1187    pub prompt: ::core::option::Option<::prost::alloc::string::String>,
1188    #[prost(string, optional, tag = "2")]
1189    pub forgot_password_url: ::core::option::Option<::prost::alloc::string::String>,
1190}
1191#[allow(clippy::derive_partial_eq_without_eq)]
1192#[derive(Clone, PartialEq, ::prost::Message)]
1193pub struct StoredValueInstrument {
1194    #[prost(int32, optional, tag = "1")]
1195    pub r#type: ::core::option::Option<i32>,
1196    #[prost(message, optional, tag = "2")]
1197    pub balance: ::core::option::Option<Money>,
1198    #[prost(message, optional, tag = "3")]
1199    pub topup_info: ::core::option::Option<TopupInfo>,
1200}
1201#[allow(clippy::derive_partial_eq_without_eq)]
1202#[derive(Clone, PartialEq, ::prost::Message)]
1203pub struct TopupInfo {
1204    #[prost(string, optional, tag = "1")]
1205    pub options_container_doc_id_deprecated: ::core::option::Option<
1206        ::prost::alloc::string::String,
1207    >,
1208    #[prost(string, optional, tag = "2")]
1209    pub options_list_url: ::core::option::Option<::prost::alloc::string::String>,
1210    #[prost(string, optional, tag = "3")]
1211    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
1212    #[prost(message, optional, tag = "4")]
1213    pub options_container_doc_id: ::core::option::Option<DocId>,
1214}
1215#[allow(clippy::derive_partial_eq_without_eq)]
1216#[derive(Clone, PartialEq, ::prost::Message)]
1217pub struct ConsumePurchaseResponse {
1218    #[prost(message, optional, tag = "1")]
1219    pub library_update: ::core::option::Option<LibraryUpdate>,
1220    #[prost(int32, optional, tag = "2")]
1221    pub status: ::core::option::Option<i32>,
1222}
1223#[allow(clippy::derive_partial_eq_without_eq)]
1224#[derive(Clone, PartialEq, ::prost::Message)]
1225pub struct ContainerMetadata {
1226    #[prost(string, optional, tag = "1")]
1227    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
1228    #[prost(string, optional, tag = "2")]
1229    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
1230    #[prost(double, optional, tag = "3")]
1231    pub relevance: ::core::option::Option<f64>,
1232    #[prost(int64, optional, tag = "4")]
1233    pub estimated_results: ::core::option::Option<i64>,
1234    #[prost(string, optional, tag = "5")]
1235    pub analytics_cookie: ::core::option::Option<::prost::alloc::string::String>,
1236    #[prost(bool, optional, tag = "6")]
1237    pub ordered: ::core::option::Option<bool>,
1238    #[prost(message, repeated, tag = "7")]
1239    pub container_view: ::prost::alloc::vec::Vec<ContainerView>,
1240    #[prost(message, optional, tag = "8")]
1241    pub left_icon: ::core::option::Option<Image>,
1242}
1243#[allow(clippy::derive_partial_eq_without_eq)]
1244#[derive(Clone, PartialEq, ::prost::Message)]
1245pub struct ContainerView {
1246    #[prost(bool, optional, tag = "1")]
1247    pub selected: ::core::option::Option<bool>,
1248    #[prost(string, optional, tag = "2")]
1249    pub title: ::core::option::Option<::prost::alloc::string::String>,
1250    #[prost(string, optional, tag = "3")]
1251    pub list_url: ::core::option::Option<::prost::alloc::string::String>,
1252    #[prost(bytes = "vec", optional, tag = "4")]
1253    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1254}
1255#[allow(clippy::derive_partial_eq_without_eq)]
1256#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1257pub struct FlagContentResponse {}
1258#[allow(clippy::derive_partial_eq_without_eq)]
1259#[derive(Clone, PartialEq, ::prost::Message)]
1260pub struct ClientDownloadRequest {
1261    #[prost(string, optional, tag = "1")]
1262    pub url: ::core::option::Option<::prost::alloc::string::String>,
1263    #[prost(message, optional, tag = "2")]
1264    pub digests: ::core::option::Option<client_download_request::Digests>,
1265    #[prost(int64, optional, tag = "3")]
1266    pub length: ::core::option::Option<i64>,
1267    #[prost(message, repeated, tag = "4")]
1268    pub resources: ::prost::alloc::vec::Vec<client_download_request::Resource>,
1269    #[prost(message, optional, tag = "5")]
1270    pub signature: ::core::option::Option<client_download_request::SignatureInfo>,
1271    #[prost(bool, optional, tag = "6")]
1272    pub user_initiated: ::core::option::Option<bool>,
1273    #[prost(string, repeated, tag = "8")]
1274    pub client_asn: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1275    #[prost(string, optional, tag = "9")]
1276    pub file_basename: ::core::option::Option<::prost::alloc::string::String>,
1277    #[prost(int32, optional, tag = "10")]
1278    pub download_type: ::core::option::Option<i32>,
1279    #[prost(string, optional, tag = "11")]
1280    pub locale: ::core::option::Option<::prost::alloc::string::String>,
1281    #[prost(message, optional, tag = "12")]
1282    pub apk_info: ::core::option::Option<client_download_request::ApkInfo>,
1283    #[prost(fixed64, optional, tag = "13")]
1284    pub android_id: ::core::option::Option<u64>,
1285    #[prost(string, repeated, tag = "15")]
1286    pub originating_packages: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1287    #[prost(message, optional, tag = "17")]
1288    pub originating_signature: ::core::option::Option<
1289        client_download_request::SignatureInfo,
1290    >,
1291}
1292/// Nested message and enum types in `ClientDownloadRequest`.
1293pub mod client_download_request {
1294    #[allow(clippy::derive_partial_eq_without_eq)]
1295    #[derive(Clone, PartialEq, ::prost::Message)]
1296    pub struct ApkInfo {
1297        #[prost(string, optional, tag = "1")]
1298        pub package_name: ::core::option::Option<::prost::alloc::string::String>,
1299        #[prost(int32, optional, tag = "2")]
1300        pub version_code: ::core::option::Option<i32>,
1301    }
1302    #[allow(clippy::derive_partial_eq_without_eq)]
1303    #[derive(Clone, PartialEq, ::prost::Message)]
1304    pub struct CertificateChain {
1305        #[prost(message, repeated, tag = "1")]
1306        pub element: ::prost::alloc::vec::Vec<certificate_chain::Element>,
1307    }
1308    /// Nested message and enum types in `CertificateChain`.
1309    pub mod certificate_chain {
1310        #[allow(clippy::derive_partial_eq_without_eq)]
1311        #[derive(Clone, PartialEq, ::prost::Message)]
1312        pub struct Element {
1313            #[prost(bytes = "vec", optional, tag = "1")]
1314            pub certificate: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1315            #[prost(bool, optional, tag = "2")]
1316            pub parsed_successfully: ::core::option::Option<bool>,
1317            #[prost(bytes = "vec", optional, tag = "3")]
1318            pub subject: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1319            #[prost(bytes = "vec", optional, tag = "4")]
1320            pub issuer: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1321            #[prost(bytes = "vec", optional, tag = "5")]
1322            pub fingerprint: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1323            #[prost(int64, optional, tag = "6")]
1324            pub expiry_time: ::core::option::Option<i64>,
1325            #[prost(int64, optional, tag = "7")]
1326            pub start_time: ::core::option::Option<i64>,
1327        }
1328    }
1329    #[allow(clippy::derive_partial_eq_without_eq)]
1330    #[derive(Clone, PartialEq, ::prost::Message)]
1331    pub struct Digests {
1332        #[prost(bytes = "vec", optional, tag = "1")]
1333        pub sha256: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1334        #[prost(bytes = "vec", optional, tag = "2")]
1335        pub sha1: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1336        #[prost(bytes = "vec", optional, tag = "3")]
1337        pub md5: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1338    }
1339    #[allow(clippy::derive_partial_eq_without_eq)]
1340    #[derive(Clone, PartialEq, ::prost::Message)]
1341    pub struct Resource {
1342        #[prost(string, optional, tag = "1")]
1343        pub url: ::core::option::Option<::prost::alloc::string::String>,
1344        #[prost(int32, optional, tag = "2")]
1345        pub r#type: ::core::option::Option<i32>,
1346        #[prost(bytes = "vec", optional, tag = "3")]
1347        pub remote_ip: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1348        #[prost(string, optional, tag = "4")]
1349        pub referrer: ::core::option::Option<::prost::alloc::string::String>,
1350    }
1351    #[allow(clippy::derive_partial_eq_without_eq)]
1352    #[derive(Clone, PartialEq, ::prost::Message)]
1353    pub struct SignatureInfo {
1354        #[prost(message, repeated, tag = "1")]
1355        pub certificate_chain: ::prost::alloc::vec::Vec<CertificateChain>,
1356        #[prost(bool, optional, tag = "2")]
1357        pub trusted: ::core::option::Option<bool>,
1358    }
1359}
1360#[allow(clippy::derive_partial_eq_without_eq)]
1361#[derive(Clone, PartialEq, ::prost::Message)]
1362pub struct ClientDownloadResponse {
1363    #[prost(int32, optional, tag = "1")]
1364    pub verdict: ::core::option::Option<i32>,
1365    #[prost(message, optional, tag = "2")]
1366    pub more_info: ::core::option::Option<client_download_response::MoreInfo>,
1367    #[prost(bytes = "vec", optional, tag = "3")]
1368    pub token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1369}
1370/// Nested message and enum types in `ClientDownloadResponse`.
1371pub mod client_download_response {
1372    #[allow(clippy::derive_partial_eq_without_eq)]
1373    #[derive(Clone, PartialEq, ::prost::Message)]
1374    pub struct MoreInfo {
1375        #[prost(string, optional, tag = "1")]
1376        pub description: ::core::option::Option<::prost::alloc::string::String>,
1377        #[prost(string, optional, tag = "2")]
1378        pub url: ::core::option::Option<::prost::alloc::string::String>,
1379    }
1380}
1381#[allow(clippy::derive_partial_eq_without_eq)]
1382#[derive(Clone, PartialEq, ::prost::Message)]
1383pub struct ClientDownloadStatsRequest {
1384    #[prost(int32, optional, tag = "1")]
1385    pub user_decision: ::core::option::Option<i32>,
1386    #[prost(bytes = "vec", optional, tag = "2")]
1387    pub token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1388}
1389#[allow(clippy::derive_partial_eq_without_eq)]
1390#[derive(Clone, PartialEq, ::prost::Message)]
1391pub struct DebugInfo {
1392    #[prost(string, repeated, tag = "1")]
1393    pub message: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1394    #[prost(group, repeated, tag = "2")]
1395    pub timing: ::prost::alloc::vec::Vec<debug_info::Timing>,
1396}
1397/// Nested message and enum types in `DebugInfo`.
1398pub mod debug_info {
1399    #[allow(clippy::derive_partial_eq_without_eq)]
1400    #[derive(Clone, PartialEq, ::prost::Message)]
1401    pub struct Timing {
1402        #[prost(string, optional, tag = "3")]
1403        pub name: ::core::option::Option<::prost::alloc::string::String>,
1404        #[prost(double, optional, tag = "4")]
1405        pub time_in_ms: ::core::option::Option<f64>,
1406    }
1407}
1408#[allow(clippy::derive_partial_eq_without_eq)]
1409#[derive(Clone, PartialEq, ::prost::Message)]
1410pub struct DebugSettingsResponse {
1411    #[prost(string, optional, tag = "1")]
1412    pub play_country_override: ::core::option::Option<::prost::alloc::string::String>,
1413    #[prost(string, optional, tag = "2")]
1414    pub play_country_debug_info: ::core::option::Option<::prost::alloc::string::String>,
1415}
1416#[allow(clippy::derive_partial_eq_without_eq)]
1417#[derive(Clone, PartialEq, ::prost::Message)]
1418pub struct DeliveryResponse {
1419    #[prost(int32, optional, tag = "1", default = "1")]
1420    pub status: ::core::option::Option<i32>,
1421    #[prost(message, optional, tag = "2")]
1422    pub app_delivery_data: ::core::option::Option<AndroidAppDeliveryData>,
1423}
1424#[allow(clippy::derive_partial_eq_without_eq)]
1425#[derive(Clone, PartialEq, ::prost::Message)]
1426pub struct BulkDetailsEntry {
1427    #[prost(message, optional, tag = "1")]
1428    pub item: ::core::option::Option<Item>,
1429}
1430#[allow(clippy::derive_partial_eq_without_eq)]
1431#[derive(Clone, PartialEq, ::prost::Message)]
1432pub struct BulkDetailsRequest {
1433    #[prost(string, repeated, tag = "1")]
1434    pub doc_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1435    #[prost(bool, optional, tag = "2", default = "true")]
1436    pub include_child_docs: ::core::option::Option<bool>,
1437    #[prost(bool, optional, tag = "3")]
1438    pub include_details: ::core::option::Option<bool>,
1439    #[prost(string, optional, tag = "4")]
1440    pub source_package_name: ::core::option::Option<::prost::alloc::string::String>,
1441    #[prost(int32, repeated, packed = "false", tag = "7")]
1442    pub installed_version_code: ::prost::alloc::vec::Vec<i32>,
1443}
1444#[allow(clippy::derive_partial_eq_without_eq)]
1445#[derive(Clone, PartialEq, ::prost::Message)]
1446pub struct BulkDetailsResponse {
1447    #[prost(message, repeated, tag = "1")]
1448    pub entry: ::prost::alloc::vec::Vec<BulkDetailsEntry>,
1449}
1450#[allow(clippy::derive_partial_eq_without_eq)]
1451#[derive(Clone, PartialEq, ::prost::Message)]
1452pub struct DetailsResponse {
1453    #[prost(string, optional, tag = "2")]
1454    pub analytics_cookie: ::core::option::Option<::prost::alloc::string::String>,
1455    #[prost(message, optional, tag = "3")]
1456    pub user_review: ::core::option::Option<Review>,
1457    #[prost(message, optional, tag = "4")]
1458    pub item: ::core::option::Option<Item>,
1459    #[prost(string, optional, tag = "5")]
1460    pub footer_html: ::core::option::Option<::prost::alloc::string::String>,
1461    #[prost(bytes = "vec", optional, tag = "6")]
1462    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1463    #[prost(message, repeated, tag = "7")]
1464    pub discovery_badge: ::prost::alloc::vec::Vec<DiscoveryBadge>,
1465    #[prost(bool, optional, tag = "8", default = "true")]
1466    pub enable_reviews: ::core::option::Option<bool>,
1467    #[prost(message, optional, tag = "12")]
1468    pub features: ::core::option::Option<Features>,
1469    #[prost(string, optional, tag = "13")]
1470    pub details_stream_url: ::core::option::Option<::prost::alloc::string::String>,
1471    #[prost(string, optional, tag = "14")]
1472    pub user_review_url: ::core::option::Option<::prost::alloc::string::String>,
1473    #[prost(string, optional, tag = "17")]
1474    pub post_acquire_details_stream_url: ::core::option::Option<
1475        ::prost::alloc::string::String,
1476    >,
1477}
1478#[allow(clippy::derive_partial_eq_without_eq)]
1479#[derive(Clone, PartialEq, ::prost::Message)]
1480pub struct DiscoveryBadge {
1481    #[prost(string, optional, tag = "1")]
1482    pub label: ::core::option::Option<::prost::alloc::string::String>,
1483    #[prost(message, optional, tag = "2")]
1484    pub image: ::core::option::Option<Image>,
1485    #[prost(int32, optional, tag = "3")]
1486    pub background_color: ::core::option::Option<i32>,
1487    #[prost(message, optional, tag = "4")]
1488    pub badge_container1: ::core::option::Option<DiscoveryBadgeLink>,
1489    #[prost(bytes = "vec", optional, tag = "5")]
1490    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1491    #[prost(bool, optional, tag = "6")]
1492    pub is_plus_one: ::core::option::Option<bool>,
1493    #[prost(float, optional, tag = "7")]
1494    pub aggregate_rating: ::core::option::Option<f32>,
1495    #[prost(int32, optional, tag = "8")]
1496    pub user_star_rating: ::core::option::Option<i32>,
1497    #[prost(string, optional, tag = "9")]
1498    pub download_count: ::core::option::Option<::prost::alloc::string::String>,
1499    #[prost(string, optional, tag = "10")]
1500    pub download_units: ::core::option::Option<::prost::alloc::string::String>,
1501    #[prost(string, optional, tag = "11")]
1502    pub content_description: ::core::option::Option<::prost::alloc::string::String>,
1503    #[prost(message, optional, tag = "12")]
1504    pub player_badge: ::core::option::Option<PlayerBadge>,
1505    #[prost(bytes = "vec", optional, tag = "13")]
1506    pub family_age_range_badge: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1507    #[prost(bytes = "vec", optional, tag = "14")]
1508    pub family_category_badge: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1509}
1510#[allow(clippy::derive_partial_eq_without_eq)]
1511#[derive(Clone, PartialEq, ::prost::Message)]
1512pub struct PlayerBadge {
1513    #[prost(message, optional, tag = "1")]
1514    pub overlay_icon: ::core::option::Option<Image>,
1515}
1516#[allow(clippy::derive_partial_eq_without_eq)]
1517#[derive(Clone, PartialEq, ::prost::Message)]
1518pub struct DiscoveryBadgeLink {
1519    #[prost(message, optional, tag = "1")]
1520    pub link: ::core::option::Option<Link>,
1521    #[prost(string, optional, tag = "2")]
1522    pub user_reviews_url: ::core::option::Option<::prost::alloc::string::String>,
1523    #[prost(string, optional, tag = "3")]
1524    pub critic_reviews_url: ::core::option::Option<::prost::alloc::string::String>,
1525}
1526#[allow(clippy::derive_partial_eq_without_eq)]
1527#[derive(Clone, PartialEq, ::prost::Message)]
1528pub struct Features {
1529    #[prost(message, repeated, tag = "1")]
1530    pub feature_presence: ::prost::alloc::vec::Vec<Feature>,
1531    #[prost(message, repeated, tag = "2")]
1532    pub feature_rating: ::prost::alloc::vec::Vec<Feature>,
1533}
1534#[allow(clippy::derive_partial_eq_without_eq)]
1535#[derive(Clone, PartialEq, ::prost::Message)]
1536pub struct Feature {
1537    #[prost(string, optional, tag = "1")]
1538    pub label: ::core::option::Option<::prost::alloc::string::String>,
1539    #[prost(string, optional, tag = "3")]
1540    pub value: ::core::option::Option<::prost::alloc::string::String>,
1541}
1542#[allow(clippy::derive_partial_eq_without_eq)]
1543#[derive(Clone, PartialEq, ::prost::Message)]
1544pub struct DeviceConfigurationProto {
1545    #[prost(int32, optional, tag = "1")]
1546    pub touch_screen: ::core::option::Option<i32>,
1547    #[prost(int32, optional, tag = "2")]
1548    pub keyboard: ::core::option::Option<i32>,
1549    #[prost(int32, optional, tag = "3")]
1550    pub navigation: ::core::option::Option<i32>,
1551    #[prost(int32, optional, tag = "4")]
1552    pub screen_layout: ::core::option::Option<i32>,
1553    #[prost(bool, optional, tag = "5")]
1554    pub has_hard_keyboard: ::core::option::Option<bool>,
1555    #[prost(bool, optional, tag = "6")]
1556    pub has_five_way_navigation: ::core::option::Option<bool>,
1557    #[prost(int32, optional, tag = "7")]
1558    pub screen_density: ::core::option::Option<i32>,
1559    #[prost(int32, optional, tag = "8")]
1560    pub gl_es_version: ::core::option::Option<i32>,
1561    #[prost(string, repeated, tag = "9")]
1562    pub system_shared_library: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1563    #[prost(string, repeated, tag = "10")]
1564    pub system_available_feature: ::prost::alloc::vec::Vec<
1565        ::prost::alloc::string::String,
1566    >,
1567    #[prost(string, repeated, tag = "11")]
1568    pub native_platform: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1569    #[prost(int32, optional, tag = "12")]
1570    pub screen_width: ::core::option::Option<i32>,
1571    #[prost(int32, optional, tag = "13")]
1572    pub screen_height: ::core::option::Option<i32>,
1573    #[prost(string, repeated, tag = "14")]
1574    pub system_supported_locale: ::prost::alloc::vec::Vec<
1575        ::prost::alloc::string::String,
1576    >,
1577    #[prost(string, repeated, tag = "15")]
1578    pub gl_extension: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1579    #[prost(int32, optional, tag = "16")]
1580    pub device_class: ::core::option::Option<i32>,
1581    #[prost(int32, optional, tag = "17", default = "50")]
1582    pub max_apk_download_size_mb: ::core::option::Option<i32>,
1583    #[prost(int32, optional, tag = "18")]
1584    pub smallest_screen_width_dp: ::core::option::Option<i32>,
1585    #[prost(int32, optional, tag = "19", default = "0")]
1586    pub low_ram_device: ::core::option::Option<i32>,
1587    #[prost(int64, optional, tag = "20", default = "8354971648")]
1588    pub total_memory_bytes: ::core::option::Option<i64>,
1589    #[prost(int32, optional, tag = "21", default = "8")]
1590    pub max_num_of_cpu_cores: ::core::option::Option<i32>,
1591    #[prost(message, repeated, tag = "26")]
1592    pub device_feature: ::prost::alloc::vec::Vec<DeviceFeature>,
1593    #[prost(int32, optional, tag = "28", default = "0")]
1594    pub unknown28: ::core::option::Option<i32>,
1595    #[prost(int32, optional, tag = "30", default = "4")]
1596    pub unknown30: ::core::option::Option<i32>,
1597}
1598#[allow(clippy::derive_partial_eq_without_eq)]
1599#[derive(Clone, PartialEq, ::prost::Message)]
1600pub struct DeviceFeature {
1601    #[prost(string, optional, tag = "1")]
1602    pub name: ::core::option::Option<::prost::alloc::string::String>,
1603    #[prost(int32, optional, tag = "2")]
1604    pub value: ::core::option::Option<i32>,
1605}
1606#[allow(clippy::derive_partial_eq_without_eq)]
1607#[derive(Clone, PartialEq, ::prost::Message)]
1608pub struct Document {
1609    #[prost(message, optional, tag = "1")]
1610    pub doc_id: ::core::option::Option<DocId>,
1611    #[prost(message, optional, tag = "2")]
1612    pub fetch_doc_id: ::core::option::Option<DocId>,
1613    #[prost(message, optional, tag = "3")]
1614    pub sample_doc_id: ::core::option::Option<DocId>,
1615    #[prost(string, optional, tag = "4")]
1616    pub title: ::core::option::Option<::prost::alloc::string::String>,
1617    #[prost(string, optional, tag = "5")]
1618    pub url: ::core::option::Option<::prost::alloc::string::String>,
1619    #[prost(string, repeated, tag = "6")]
1620    pub snippet: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1621    #[prost(message, optional, tag = "7")]
1622    pub price_deprecated: ::core::option::Option<Offer>,
1623    #[prost(message, optional, tag = "9")]
1624    pub availability: ::core::option::Option<Availability>,
1625    #[prost(message, repeated, tag = "10")]
1626    pub image: ::prost::alloc::vec::Vec<Image>,
1627    #[prost(message, repeated, tag = "11")]
1628    pub child: ::prost::alloc::vec::Vec<Document>,
1629    #[prost(message, optional, tag = "13")]
1630    pub aggregate_rating: ::core::option::Option<AggregateRating>,
1631    #[prost(message, repeated, tag = "14")]
1632    pub offer: ::prost::alloc::vec::Vec<Offer>,
1633    #[prost(message, repeated, tag = "15")]
1634    pub translated_snippet: ::prost::alloc::vec::Vec<TranslatedText>,
1635    #[prost(message, repeated, tag = "16")]
1636    pub document_variant: ::prost::alloc::vec::Vec<DocumentVariant>,
1637    #[prost(string, repeated, tag = "17")]
1638    pub category_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1639    #[prost(message, repeated, tag = "18")]
1640    pub decoration: ::prost::alloc::vec::Vec<Document>,
1641    #[prost(message, repeated, tag = "19")]
1642    pub parent: ::prost::alloc::vec::Vec<Document>,
1643    #[prost(string, optional, tag = "20")]
1644    pub privacy_policy_url: ::core::option::Option<::prost::alloc::string::String>,
1645    #[prost(string, optional, tag = "21")]
1646    pub consumption_url: ::core::option::Option<::prost::alloc::string::String>,
1647    #[prost(int32, optional, tag = "22")]
1648    pub estimated_num_children: ::core::option::Option<i32>,
1649    #[prost(string, optional, tag = "23")]
1650    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
1651}
1652#[allow(clippy::derive_partial_eq_without_eq)]
1653#[derive(Clone, PartialEq, ::prost::Message)]
1654pub struct DocumentVariant {
1655    #[prost(int32, optional, tag = "1")]
1656    pub variation_type: ::core::option::Option<i32>,
1657    #[prost(message, optional, tag = "2")]
1658    pub rule: ::core::option::Option<Rule>,
1659    #[prost(string, optional, tag = "3")]
1660    pub title: ::core::option::Option<::prost::alloc::string::String>,
1661    #[prost(string, repeated, tag = "4")]
1662    pub snippet: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1663    #[prost(string, optional, tag = "5")]
1664    pub recent_changes: ::core::option::Option<::prost::alloc::string::String>,
1665    #[prost(message, repeated, tag = "6")]
1666    pub auto_translation: ::prost::alloc::vec::Vec<TranslatedText>,
1667    #[prost(message, repeated, tag = "7")]
1668    pub offer: ::prost::alloc::vec::Vec<Offer>,
1669    #[prost(int64, optional, tag = "9")]
1670    pub channel_id: ::core::option::Option<i64>,
1671    #[prost(message, repeated, tag = "10")]
1672    pub child: ::prost::alloc::vec::Vec<Document>,
1673    #[prost(message, repeated, tag = "11")]
1674    pub decoration: ::prost::alloc::vec::Vec<Document>,
1675    #[prost(message, repeated, tag = "12")]
1676    pub image: ::prost::alloc::vec::Vec<Image>,
1677    #[prost(string, repeated, tag = "13")]
1678    pub category_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1679    #[prost(string, optional, tag = "14")]
1680    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
1681}
1682#[allow(clippy::derive_partial_eq_without_eq)]
1683#[derive(Clone, PartialEq, ::prost::Message)]
1684pub struct SectionImage {
1685    #[prost(message, repeated, tag = "1")]
1686    pub image_container: ::prost::alloc::vec::Vec<ImageContainer>,
1687}
1688#[allow(clippy::derive_partial_eq_without_eq)]
1689#[derive(Clone, PartialEq, ::prost::Message)]
1690pub struct ImageContainer {
1691    #[prost(message, optional, tag = "4")]
1692    pub image: ::core::option::Option<Image>,
1693}
1694#[allow(clippy::derive_partial_eq_without_eq)]
1695#[derive(Clone, PartialEq, ::prost::Message)]
1696pub struct Image {
1697    #[prost(int32, optional, tag = "1")]
1698    pub image_type: ::core::option::Option<i32>,
1699    #[prost(group, optional, tag = "2")]
1700    pub dimension: ::core::option::Option<image::Dimension>,
1701    #[prost(string, optional, tag = "5")]
1702    pub image_url: ::core::option::Option<::prost::alloc::string::String>,
1703    #[prost(string, optional, tag = "6")]
1704    pub alt_text_localized: ::core::option::Option<::prost::alloc::string::String>,
1705    #[prost(string, optional, tag = "7")]
1706    pub secure_url: ::core::option::Option<::prost::alloc::string::String>,
1707    #[prost(int32, optional, tag = "8")]
1708    pub position_in_sequence: ::core::option::Option<i32>,
1709    #[prost(bool, optional, tag = "9")]
1710    pub supports_fife_url_options: ::core::option::Option<bool>,
1711    #[prost(group, optional, tag = "10")]
1712    pub citation: ::core::option::Option<image::Citation>,
1713    #[prost(int32, optional, tag = "14")]
1714    pub duration_seconds: ::core::option::Option<i32>,
1715    #[prost(string, optional, tag = "15")]
1716    pub fill_color_rgb: ::core::option::Option<::prost::alloc::string::String>,
1717    #[prost(bool, optional, tag = "16")]
1718    pub autogen: ::core::option::Option<bool>,
1719    #[prost(message, optional, tag = "17")]
1720    pub attribution: ::core::option::Option<Attribution>,
1721    #[prost(string, optional, tag = "19")]
1722    pub background_color_rgb: ::core::option::Option<::prost::alloc::string::String>,
1723    #[prost(message, optional, tag = "20")]
1724    pub palette: ::core::option::Option<ImagePalette>,
1725    #[prost(int32, optional, tag = "21")]
1726    pub device_class: ::core::option::Option<i32>,
1727    #[prost(bool, optional, tag = "22")]
1728    pub supports_fife_monogram_option: ::core::option::Option<bool>,
1729    #[prost(string, optional, tag = "28")]
1730    pub image_url_alt: ::core::option::Option<::prost::alloc::string::String>,
1731}
1732/// Nested message and enum types in `Image`.
1733pub mod image {
1734    #[allow(clippy::derive_partial_eq_without_eq)]
1735    #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1736    pub struct Dimension {
1737        #[prost(int32, optional, tag = "3")]
1738        pub width: ::core::option::Option<i32>,
1739        #[prost(int32, optional, tag = "4")]
1740        pub height: ::core::option::Option<i32>,
1741        #[prost(int32, optional, tag = "18")]
1742        pub aspect_ratio: ::core::option::Option<i32>,
1743    }
1744    #[allow(clippy::derive_partial_eq_without_eq)]
1745    #[derive(Clone, PartialEq, ::prost::Message)]
1746    pub struct Citation {
1747        #[prost(string, optional, tag = "11")]
1748        pub title_localized: ::core::option::Option<::prost::alloc::string::String>,
1749        #[prost(string, optional, tag = "12")]
1750        pub url: ::core::option::Option<::prost::alloc::string::String>,
1751    }
1752}
1753#[allow(clippy::derive_partial_eq_without_eq)]
1754#[derive(Clone, PartialEq, ::prost::Message)]
1755pub struct Attribution {
1756    #[prost(string, optional, tag = "1")]
1757    pub source_title: ::core::option::Option<::prost::alloc::string::String>,
1758    #[prost(string, optional, tag = "2")]
1759    pub source_url: ::core::option::Option<::prost::alloc::string::String>,
1760    #[prost(string, optional, tag = "3")]
1761    pub license_title: ::core::option::Option<::prost::alloc::string::String>,
1762    #[prost(string, optional, tag = "4")]
1763    pub license_url: ::core::option::Option<::prost::alloc::string::String>,
1764}
1765#[allow(clippy::derive_partial_eq_without_eq)]
1766#[derive(Clone, PartialEq, ::prost::Message)]
1767pub struct ImagePalette {
1768    #[prost(string, optional, tag = "1")]
1769    pub light_vibrant_rgb: ::core::option::Option<::prost::alloc::string::String>,
1770    #[prost(string, optional, tag = "2")]
1771    pub vibrant_rgb: ::core::option::Option<::prost::alloc::string::String>,
1772    #[prost(string, optional, tag = "3")]
1773    pub dark_vibrant_rgb: ::core::option::Option<::prost::alloc::string::String>,
1774    #[prost(string, optional, tag = "4")]
1775    pub light_muted_rgb: ::core::option::Option<::prost::alloc::string::String>,
1776    #[prost(string, optional, tag = "5")]
1777    pub muted_rgb: ::core::option::Option<::prost::alloc::string::String>,
1778    #[prost(string, optional, tag = "6")]
1779    pub dark_muted_rgb: ::core::option::Option<::prost::alloc::string::String>,
1780}
1781#[allow(clippy::derive_partial_eq_without_eq)]
1782#[derive(Clone, PartialEq, ::prost::Message)]
1783pub struct TranslatedText {
1784    #[prost(string, optional, tag = "1")]
1785    pub text: ::core::option::Option<::prost::alloc::string::String>,
1786    #[prost(string, optional, tag = "2")]
1787    pub source_locale: ::core::option::Option<::prost::alloc::string::String>,
1788    #[prost(string, optional, tag = "3")]
1789    pub target_locale: ::core::option::Option<::prost::alloc::string::String>,
1790}
1791#[allow(clippy::derive_partial_eq_without_eq)]
1792#[derive(Clone, PartialEq, ::prost::Message)]
1793pub struct PlusOneData {
1794    #[prost(bool, optional, tag = "1")]
1795    pub set_by_user: ::core::option::Option<bool>,
1796    #[prost(int64, optional, tag = "2")]
1797    pub total: ::core::option::Option<i64>,
1798    #[prost(int64, optional, tag = "3")]
1799    pub circles_total: ::core::option::Option<i64>,
1800    #[prost(message, repeated, tag = "4")]
1801    pub circles_people: ::prost::alloc::vec::Vec<PlusPerson>,
1802}
1803#[allow(clippy::derive_partial_eq_without_eq)]
1804#[derive(Clone, PartialEq, ::prost::Message)]
1805pub struct PlusPerson {
1806    #[prost(string, optional, tag = "2")]
1807    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
1808    #[prost(string, optional, tag = "4")]
1809    pub profile_image_url: ::core::option::Option<::prost::alloc::string::String>,
1810}
1811#[allow(clippy::derive_partial_eq_without_eq)]
1812#[derive(Clone, PartialEq, ::prost::Message)]
1813pub struct AppDetails {
1814    #[prost(string, optional, tag = "1")]
1815    pub developer_name: ::core::option::Option<::prost::alloc::string::String>,
1816    #[prost(int32, optional, tag = "2")]
1817    pub major_version_number: ::core::option::Option<i32>,
1818    #[prost(int32, optional, tag = "3")]
1819    pub version_code: ::core::option::Option<i32>,
1820    #[prost(string, optional, tag = "4")]
1821    pub version_string: ::core::option::Option<::prost::alloc::string::String>,
1822    #[prost(string, optional, tag = "5")]
1823    pub title: ::core::option::Option<::prost::alloc::string::String>,
1824    #[prost(string, repeated, tag = "7")]
1825    pub app_category: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1826    #[prost(int32, optional, tag = "8")]
1827    pub content_rating: ::core::option::Option<i32>,
1828    #[prost(int64, optional, tag = "9")]
1829    pub info_download_size: ::core::option::Option<i64>,
1830    #[prost(string, repeated, tag = "10")]
1831    pub permission: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1832    #[prost(string, optional, tag = "11")]
1833    pub developer_email: ::core::option::Option<::prost::alloc::string::String>,
1834    #[prost(string, optional, tag = "12")]
1835    pub developer_website: ::core::option::Option<::prost::alloc::string::String>,
1836    #[prost(string, optional, tag = "13")]
1837    pub info_download: ::core::option::Option<::prost::alloc::string::String>,
1838    #[prost(string, optional, tag = "14")]
1839    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
1840    #[prost(string, optional, tag = "15")]
1841    pub recent_changes_html: ::core::option::Option<::prost::alloc::string::String>,
1842    #[prost(string, optional, tag = "16")]
1843    pub info_updated_on: ::core::option::Option<::prost::alloc::string::String>,
1844    #[prost(message, repeated, tag = "17")]
1845    pub file: ::prost::alloc::vec::Vec<FileMetadata>,
1846    #[prost(string, optional, tag = "18")]
1847    pub app_type: ::core::option::Option<::prost::alloc::string::String>,
1848    #[prost(string, repeated, tag = "19")]
1849    pub certificate_hash: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1850    #[prost(bool, optional, tag = "21", default = "true")]
1851    pub varies_with_device: ::core::option::Option<bool>,
1852    #[prost(message, repeated, tag = "22")]
1853    pub certificate_set: ::prost::alloc::vec::Vec<CertificateSet>,
1854    #[prost(string, repeated, tag = "23")]
1855    pub auto_acquire_free_app_if_higher_version_available_tag: ::prost::alloc::vec::Vec<
1856        ::prost::alloc::string::String,
1857    >,
1858    #[prost(bool, optional, tag = "24")]
1859    pub has_instant_link: ::core::option::Option<bool>,
1860    #[prost(string, repeated, tag = "25")]
1861    pub split_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1862    #[prost(bool, optional, tag = "26")]
1863    pub gamepad_required: ::core::option::Option<bool>,
1864    #[prost(bool, optional, tag = "27")]
1865    pub externally_hosted: ::core::option::Option<bool>,
1866    #[prost(bool, optional, tag = "28")]
1867    pub ever_externally_hosted: ::core::option::Option<bool>,
1868    #[prost(string, optional, tag = "30")]
1869    pub install_notes: ::core::option::Option<::prost::alloc::string::String>,
1870    #[prost(int32, optional, tag = "31")]
1871    pub install_location: ::core::option::Option<i32>,
1872    #[prost(int32, optional, tag = "32")]
1873    pub target_sdk_version: ::core::option::Option<i32>,
1874    #[prost(string, optional, tag = "33")]
1875    pub has_preregistration_promo_code: ::core::option::Option<
1876        ::prost::alloc::string::String,
1877    >,
1878    #[prost(message, optional, tag = "34")]
1879    pub dependencies: ::core::option::Option<Dependencies>,
1880    #[prost(message, optional, tag = "35")]
1881    pub testing_program_info: ::core::option::Option<TestingProgramInfo>,
1882    #[prost(message, optional, tag = "36")]
1883    pub early_access_info: ::core::option::Option<EarlyAccessInfo>,
1884    #[prost(message, optional, tag = "41")]
1885    pub editor_choice: ::core::option::Option<EditorChoice>,
1886    #[prost(string, optional, tag = "43")]
1887    pub instant_link: ::core::option::Option<::prost::alloc::string::String>,
1888    #[prost(string, optional, tag = "45")]
1889    pub developer_address: ::core::option::Option<::prost::alloc::string::String>,
1890    #[prost(message, optional, tag = "46")]
1891    pub publisher: ::core::option::Option<Publisher>,
1892    #[prost(string, optional, tag = "48")]
1893    pub category_name: ::core::option::Option<::prost::alloc::string::String>,
1894    #[prost(int64, optional, tag = "53")]
1895    pub download_count: ::core::option::Option<i64>,
1896    #[prost(string, optional, tag = "61")]
1897    pub download_label_display: ::core::option::Option<::prost::alloc::string::String>,
1898    #[prost(string, optional, tag = "67")]
1899    pub in_app_product: ::core::option::Option<::prost::alloc::string::String>,
1900    #[prost(string, optional, tag = "77")]
1901    pub download_label_abbreviated: ::core::option::Option<
1902        ::prost::alloc::string::String,
1903    >,
1904    #[prost(string, optional, tag = "78")]
1905    pub download_label: ::core::option::Option<::prost::alloc::string::String>,
1906    #[prost(message, optional, tag = "82")]
1907    pub compatibility: ::core::option::Option<Compatibility>,
1908}
1909#[allow(clippy::derive_partial_eq_without_eq)]
1910#[derive(Clone, PartialEq, ::prost::Message)]
1911pub struct Compatibility {
1912    #[prost(message, repeated, tag = "1")]
1913    pub active_devices: ::prost::alloc::vec::Vec<ActiveDevice>,
1914}
1915#[allow(clippy::derive_partial_eq_without_eq)]
1916#[derive(Clone, PartialEq, ::prost::Message)]
1917pub struct ActiveDevice {
1918    #[prost(string, optional, tag = "1")]
1919    pub required_os: ::core::option::Option<::prost::alloc::string::String>,
1920    #[prost(string, optional, tag = "2")]
1921    pub name: ::core::option::Option<::prost::alloc::string::String>,
1922}
1923#[allow(clippy::derive_partial_eq_without_eq)]
1924#[derive(Clone, PartialEq, ::prost::Message)]
1925pub struct ModifyLibrary {
1926    #[prost(string, optional, tag = "1")]
1927    pub id: ::core::option::Option<::prost::alloc::string::String>,
1928    #[prost(string, optional, tag = "2")]
1929    pub package_to_add: ::core::option::Option<::prost::alloc::string::String>,
1930    #[prost(string, optional, tag = "3")]
1931    pub package_to_remove: ::core::option::Option<::prost::alloc::string::String>,
1932}
1933#[allow(clippy::derive_partial_eq_without_eq)]
1934#[derive(Clone, PartialEq, ::prost::Message)]
1935pub struct Publisher {
1936    #[prost(message, optional, tag = "2")]
1937    pub publisher_stream: ::core::option::Option<PublisherStream>,
1938}
1939#[allow(clippy::derive_partial_eq_without_eq)]
1940#[derive(Clone, PartialEq, ::prost::Message)]
1941pub struct PublisherStream {
1942    #[prost(string, optional, tag = "3")]
1943    pub more_url: ::core::option::Option<::prost::alloc::string::String>,
1944    #[prost(string, optional, tag = "11")]
1945    pub query: ::core::option::Option<::prost::alloc::string::String>,
1946}
1947#[allow(clippy::derive_partial_eq_without_eq)]
1948#[derive(Clone, PartialEq, ::prost::Message)]
1949pub struct EditorChoice {
1950    #[prost(string, repeated, tag = "1")]
1951    pub bulletins: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1952    #[prost(string, optional, tag = "2")]
1953    pub description: ::core::option::Option<::prost::alloc::string::String>,
1954    #[prost(message, optional, tag = "3")]
1955    pub stream: ::core::option::Option<SubStream>,
1956    #[prost(string, optional, tag = "4")]
1957    pub title: ::core::option::Option<::prost::alloc::string::String>,
1958    #[prost(string, optional, tag = "5")]
1959    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
1960}
1961#[allow(clippy::derive_partial_eq_without_eq)]
1962#[derive(Clone, PartialEq, ::prost::Message)]
1963pub struct CertificateSet {
1964    #[prost(string, optional, tag = "1")]
1965    pub certificate_hash: ::core::option::Option<::prost::alloc::string::String>,
1966    #[prost(string, optional, tag = "2")]
1967    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
1968}
1969#[allow(clippy::derive_partial_eq_without_eq)]
1970#[derive(Clone, PartialEq, ::prost::Message)]
1971pub struct Dependencies {
1972    #[prost(int32, optional, tag = "1")]
1973    pub unknown: ::core::option::Option<i32>,
1974    #[prost(int64, optional, tag = "2")]
1975    pub size: ::core::option::Option<i64>,
1976    #[prost(message, repeated, tag = "3")]
1977    pub dependency: ::prost::alloc::vec::Vec<Dependency>,
1978    #[prost(int32, optional, tag = "4")]
1979    pub target_sdk: ::core::option::Option<i32>,
1980    #[prost(int32, optional, tag = "5")]
1981    pub unknown2: ::core::option::Option<i32>,
1982    #[prost(string, repeated, tag = "11")]
1983    pub split_apks: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1984    #[prost(message, repeated, tag = "13")]
1985    pub library_dependency: ::prost::alloc::vec::Vec<LibraryDependency>,
1986}
1987#[allow(clippy::derive_partial_eq_without_eq)]
1988#[derive(Clone, PartialEq, ::prost::Message)]
1989pub struct Dependency {
1990    #[prost(string, optional, tag = "1")]
1991    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
1992    #[prost(int32, optional, tag = "2")]
1993    pub version: ::core::option::Option<i32>,
1994    #[prost(int32, optional, tag = "4")]
1995    pub unknown4: ::core::option::Option<i32>,
1996}
1997#[allow(clippy::derive_partial_eq_without_eq)]
1998#[derive(Clone, PartialEq, ::prost::Message)]
1999pub struct LibraryDependency {
2000    #[prost(string, optional, tag = "1")]
2001    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
2002    #[prost(int32, optional, tag = "2")]
2003    pub version_code: ::core::option::Option<i32>,
2004}
2005#[allow(clippy::derive_partial_eq_without_eq)]
2006#[derive(Clone, PartialEq, ::prost::Message)]
2007pub struct TestingProgramInfo {
2008    #[prost(bool, optional, tag = "2")]
2009    pub subscribed: ::core::option::Option<bool>,
2010    #[prost(bool, optional, tag = "3")]
2011    pub subscribed_and_installed: ::core::option::Option<bool>,
2012    #[prost(string, optional, tag = "5")]
2013    pub email: ::core::option::Option<::prost::alloc::string::String>,
2014    #[prost(string, optional, tag = "7")]
2015    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
2016    #[prost(message, optional, tag = "6")]
2017    pub image: ::core::option::Option<Image>,
2018}
2019#[allow(clippy::derive_partial_eq_without_eq)]
2020#[derive(Clone, PartialEq, ::prost::Message)]
2021pub struct EarlyAccessInfo {
2022    #[prost(string, optional, tag = "3")]
2023    pub email: ::core::option::Option<::prost::alloc::string::String>,
2024}
2025#[allow(clippy::derive_partial_eq_without_eq)]
2026#[derive(Clone, PartialEq, ::prost::Message)]
2027pub struct DocumentDetails {
2028    #[prost(message, optional, tag = "1")]
2029    pub app_details: ::core::option::Option<AppDetails>,
2030    #[prost(message, optional, tag = "7")]
2031    pub subscription_details: ::core::option::Option<SubscriptionDetails>,
2032}
2033#[allow(clippy::derive_partial_eq_without_eq)]
2034#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2035pub struct PatchDetails {
2036    #[prost(int32, optional, tag = "1")]
2037    pub base_version_code: ::core::option::Option<i32>,
2038    #[prost(int64, optional, tag = "2")]
2039    pub size: ::core::option::Option<i64>,
2040}
2041#[allow(clippy::derive_partial_eq_without_eq)]
2042#[derive(Clone, PartialEq, ::prost::Message)]
2043pub struct FileMetadata {
2044    #[prost(int32, optional, tag = "1")]
2045    pub file_type: ::core::option::Option<i32>,
2046    #[prost(int32, optional, tag = "2")]
2047    pub version_code: ::core::option::Option<i32>,
2048    #[prost(int64, optional, tag = "3")]
2049    pub size: ::core::option::Option<i64>,
2050    #[prost(string, optional, tag = "4")]
2051    pub split_id: ::core::option::Option<::prost::alloc::string::String>,
2052    #[prost(int64, optional, tag = "5")]
2053    pub compressed_size: ::core::option::Option<i64>,
2054    #[prost(message, repeated, tag = "6")]
2055    pub patch_details: ::prost::alloc::vec::Vec<PatchDetails>,
2056}
2057#[allow(clippy::derive_partial_eq_without_eq)]
2058#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2059pub struct SubscriptionDetails {
2060    #[prost(int32, optional, tag = "1")]
2061    pub subscription_period: ::core::option::Option<i32>,
2062}
2063#[allow(clippy::derive_partial_eq_without_eq)]
2064#[derive(Clone, PartialEq, ::prost::Message)]
2065pub struct Bucket {
2066    #[prost(bool, optional, tag = "2")]
2067    pub multi_corpus: ::core::option::Option<bool>,
2068    #[prost(string, optional, tag = "3")]
2069    pub title: ::core::option::Option<::prost::alloc::string::String>,
2070    #[prost(string, optional, tag = "4")]
2071    pub icon_url: ::core::option::Option<::prost::alloc::string::String>,
2072    #[prost(string, optional, tag = "5")]
2073    pub full_contents_url: ::core::option::Option<::prost::alloc::string::String>,
2074    #[prost(double, optional, tag = "6")]
2075    pub relevance: ::core::option::Option<f64>,
2076    #[prost(int64, optional, tag = "7")]
2077    pub estimated_results: ::core::option::Option<i64>,
2078    #[prost(string, optional, tag = "8")]
2079    pub analytics_cookie: ::core::option::Option<::prost::alloc::string::String>,
2080    #[prost(string, optional, tag = "9")]
2081    pub full_contents_list_url: ::core::option::Option<::prost::alloc::string::String>,
2082    #[prost(string, optional, tag = "10")]
2083    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
2084    #[prost(bool, optional, tag = "11")]
2085    pub ordered: ::core::option::Option<bool>,
2086}
2087#[allow(clippy::derive_partial_eq_without_eq)]
2088#[derive(Clone, PartialEq, ::prost::Message)]
2089pub struct ListResponse {
2090    #[prost(message, repeated, tag = "1")]
2091    pub bucket: ::prost::alloc::vec::Vec<Bucket>,
2092    #[prost(message, repeated, tag = "2")]
2093    pub item: ::prost::alloc::vec::Vec<Item>,
2094}
2095#[allow(clippy::derive_partial_eq_without_eq)]
2096#[derive(Clone, PartialEq, ::prost::Message)]
2097pub struct Item {
2098    #[prost(string, optional, tag = "1")]
2099    pub id: ::core::option::Option<::prost::alloc::string::String>,
2100    #[prost(string, optional, tag = "2")]
2101    pub sub_id: ::core::option::Option<::prost::alloc::string::String>,
2102    #[prost(int32, optional, tag = "3")]
2103    pub r#type: ::core::option::Option<i32>,
2104    #[prost(int32, optional, tag = "4")]
2105    pub category_id: ::core::option::Option<i32>,
2106    #[prost(string, optional, tag = "5")]
2107    pub title: ::core::option::Option<::prost::alloc::string::String>,
2108    #[prost(string, optional, tag = "6")]
2109    pub creator: ::core::option::Option<::prost::alloc::string::String>,
2110    #[prost(string, optional, tag = "7")]
2111    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
2112    #[prost(message, repeated, tag = "8")]
2113    pub offer: ::prost::alloc::vec::Vec<Offer>,
2114    #[prost(message, optional, tag = "9")]
2115    pub availability: ::core::option::Option<Availability>,
2116    #[prost(message, repeated, tag = "10")]
2117    pub image: ::prost::alloc::vec::Vec<Image>,
2118    #[prost(message, repeated, tag = "11")]
2119    pub sub_item: ::prost::alloc::vec::Vec<Item>,
2120    #[prost(message, optional, tag = "12")]
2121    pub container_metadata: ::core::option::Option<ContainerMetadata>,
2122    #[prost(message, optional, tag = "13")]
2123    pub details: ::core::option::Option<DocumentDetails>,
2124    #[prost(message, optional, tag = "14")]
2125    pub aggregate_rating: ::core::option::Option<AggregateRating>,
2126    #[prost(message, optional, tag = "15")]
2127    pub annotations: ::core::option::Option<Annotations>,
2128    #[prost(string, optional, tag = "16")]
2129    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
2130    #[prost(string, optional, tag = "17")]
2131    pub share_url: ::core::option::Option<::prost::alloc::string::String>,
2132    #[prost(string, optional, tag = "18")]
2133    pub reviews_url: ::core::option::Option<::prost::alloc::string::String>,
2134    #[prost(string, optional, tag = "19")]
2135    pub backend_url: ::core::option::Option<::prost::alloc::string::String>,
2136    #[prost(string, optional, tag = "20")]
2137    pub purchase_details_url: ::core::option::Option<::prost::alloc::string::String>,
2138    #[prost(bool, optional, tag = "21")]
2139    pub details_reusable: ::core::option::Option<bool>,
2140    #[prost(string, optional, tag = "22")]
2141    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
2142    #[prost(string, optional, tag = "23")]
2143    pub translated_description_html: ::core::option::Option<
2144        ::prost::alloc::string::String,
2145    >,
2146    #[prost(bytes = "vec", optional, tag = "24")]
2147    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
2148    #[prost(message, optional, tag = "25")]
2149    pub app_info: ::core::option::Option<AppInfo>,
2150    #[prost(bool, optional, tag = "26")]
2151    pub mature: ::core::option::Option<bool>,
2152    #[prost(string, optional, tag = "27")]
2153    pub promotional_description: ::core::option::Option<::prost::alloc::string::String>,
2154    #[prost(bool, optional, tag = "29")]
2155    pub available_for_preregistration: ::core::option::Option<bool>,
2156    #[prost(message, repeated, tag = "30")]
2157    pub tip: ::prost::alloc::vec::Vec<ReviewTip>,
2158    #[prost(string, optional, tag = "31")]
2159    pub review_snippets_url: ::core::option::Option<::prost::alloc::string::String>,
2160    #[prost(bool, optional, tag = "32")]
2161    pub force_shareability: ::core::option::Option<bool>,
2162    #[prost(bool, optional, tag = "33")]
2163    pub use_wishlist_as_primary_action: ::core::option::Option<bool>,
2164    #[prost(string, optional, tag = "34")]
2165    pub review_questions_url: ::core::option::Option<::prost::alloc::string::String>,
2166    #[prost(string, optional, tag = "39")]
2167    pub review_summary_url: ::core::option::Option<::prost::alloc::string::String>,
2168    #[prost(message, optional, tag = "50")]
2169    pub content_rating: ::core::option::Option<ContentRating>,
2170}
2171#[allow(clippy::derive_partial_eq_without_eq)]
2172#[derive(Clone, PartialEq, ::prost::Message)]
2173pub struct ContentRating {
2174    #[prost(string, optional, tag = "1")]
2175    pub title: ::core::option::Option<::prost::alloc::string::String>,
2176    #[prost(string, optional, tag = "2")]
2177    pub recommendation_and_description_html: ::core::option::Option<
2178        ::prost::alloc::string::String,
2179    >,
2180    #[prost(message, optional, tag = "3")]
2181    pub content_rating_image: ::core::option::Option<content_rating::ContentRatingImage>,
2182    #[prost(string, optional, tag = "5")]
2183    pub recommendation: ::core::option::Option<::prost::alloc::string::String>,
2184    #[prost(string, optional, tag = "6")]
2185    pub description: ::core::option::Option<::prost::alloc::string::String>,
2186}
2187/// Nested message and enum types in `ContentRating`.
2188pub mod content_rating {
2189    #[allow(clippy::derive_partial_eq_without_eq)]
2190    #[derive(Clone, PartialEq, ::prost::Message)]
2191    pub struct ContentRatingImage {
2192        #[prost(message, optional, tag = "3")]
2193        pub dimension: ::core::option::Option<content_rating_image::Dimension>,
2194        #[prost(message, optional, tag = "6")]
2195        pub image: ::core::option::Option<content_rating_image::Image>,
2196    }
2197    /// Nested message and enum types in `ContentRatingImage`.
2198    pub mod content_rating_image {
2199        #[allow(clippy::derive_partial_eq_without_eq)]
2200        #[derive(Clone, Copy, PartialEq, ::prost::Message)]
2201        pub struct Dimension {
2202            #[prost(int32, optional, tag = "3")]
2203            pub width: ::core::option::Option<i32>,
2204            #[prost(int32, optional, tag = "4")]
2205            pub height: ::core::option::Option<i32>,
2206        }
2207        #[allow(clippy::derive_partial_eq_without_eq)]
2208        #[derive(Clone, PartialEq, ::prost::Message)]
2209        pub struct Image {
2210            #[prost(string, optional, tag = "1")]
2211            pub url: ::core::option::Option<::prost::alloc::string::String>,
2212        }
2213    }
2214}
2215#[allow(clippy::derive_partial_eq_without_eq)]
2216#[derive(Clone, PartialEq, ::prost::Message)]
2217pub struct AppInfo {
2218    #[prost(string, optional, tag = "1")]
2219    pub title: ::core::option::Option<::prost::alloc::string::String>,
2220    #[prost(message, repeated, tag = "2")]
2221    pub section: ::prost::alloc::vec::Vec<AppInfoSection>,
2222}
2223#[allow(clippy::derive_partial_eq_without_eq)]
2224#[derive(Clone, PartialEq, ::prost::Message)]
2225pub struct AppInfoSection {
2226    #[prost(string, optional, tag = "1")]
2227    pub label: ::core::option::Option<::prost::alloc::string::String>,
2228    #[prost(message, optional, tag = "3")]
2229    pub container: ::core::option::Option<AppInfoContainer>,
2230}
2231#[allow(clippy::derive_partial_eq_without_eq)]
2232#[derive(Clone, PartialEq, ::prost::Message)]
2233pub struct AppInfoContainer {
2234    #[prost(message, optional, tag = "1")]
2235    pub image: ::core::option::Option<Image>,
2236    #[prost(string, optional, tag = "2")]
2237    pub description: ::core::option::Option<::prost::alloc::string::String>,
2238}
2239#[allow(clippy::derive_partial_eq_without_eq)]
2240#[derive(Clone, PartialEq, ::prost::Message)]
2241pub struct Annotations {
2242    #[prost(message, optional, tag = "1")]
2243    pub section_related: ::core::option::Option<SectionMetaData>,
2244    #[prost(message, optional, tag = "2")]
2245    pub section_more_by: ::core::option::Option<SectionMetaData>,
2246    #[prost(message, repeated, tag = "4")]
2247    pub warning: ::prost::alloc::vec::Vec<Warning>,
2248    #[prost(message, optional, tag = "5")]
2249    pub section_body_of_work: ::core::option::Option<SectionMetaData>,
2250    #[prost(message, optional, tag = "6")]
2251    pub section_core_content: ::core::option::Option<SectionMetaData>,
2252    #[prost(message, optional, tag = "7")]
2253    pub overlay_meta_data: ::core::option::Option<OverlayMetaData>,
2254    #[prost(message, repeated, tag = "8")]
2255    pub badge_for_creator: ::prost::alloc::vec::Vec<Badge>,
2256    #[prost(message, repeated, tag = "9")]
2257    pub info_badge: ::prost::alloc::vec::Vec<Badge>,
2258    #[prost(message, optional, tag = "10")]
2259    pub annotation_link: ::core::option::Option<AnnotationLink>,
2260    #[prost(message, optional, tag = "11")]
2261    pub section_cross_sell: ::core::option::Option<SectionMetaData>,
2262    #[prost(message, optional, tag = "12")]
2263    pub section_related_item_type: ::core::option::Option<SectionMetaData>,
2264    #[prost(message, repeated, tag = "13")]
2265    pub promoted_doc: ::prost::alloc::vec::Vec<PromotedDoc>,
2266    #[prost(string, optional, tag = "14")]
2267    pub offer_note: ::core::option::Option<::prost::alloc::string::String>,
2268    #[prost(string, optional, tag = "18")]
2269    pub privacy_policy_url: ::core::option::Option<::prost::alloc::string::String>,
2270    #[prost(message, optional, tag = "19")]
2271    pub suggestion_reasons: ::core::option::Option<SuggestionReasons>,
2272    #[prost(message, optional, tag = "20")]
2273    pub optimal_device_class_warning: ::core::option::Option<Warning>,
2274    #[prost(message, repeated, tag = "21")]
2275    pub badge_container: ::prost::alloc::vec::Vec<BadgeContainer>,
2276    #[prost(message, optional, tag = "22")]
2277    pub section_suggest_for_rating: ::core::option::Option<SectionMetaData>,
2278    #[prost(message, optional, tag = "24")]
2279    pub section_purchase_cross_sell: ::core::option::Option<SectionMetaData>,
2280    #[prost(message, repeated, tag = "25")]
2281    pub overflow_link: ::prost::alloc::vec::Vec<OverflowLink>,
2282    #[prost(string, optional, tag = "27")]
2283    pub attribution_html: ::core::option::Option<::prost::alloc::string::String>,
2284    #[prost(message, optional, tag = "28")]
2285    pub purchase_history_details: ::core::option::Option<PurchaseHistoryDetails>,
2286    #[prost(message, optional, tag = "29")]
2287    pub badge_for_legacy_rating: ::core::option::Option<Badge>,
2288    #[prost(message, repeated, tag = "30")]
2289    pub voucher_info: ::prost::alloc::vec::Vec<VoucherInfo>,
2290    #[prost(message, optional, tag = "32")]
2291    pub section_featured_apps: ::core::option::Option<SectionMetaData>,
2292    #[prost(message, repeated, tag = "34")]
2293    pub details_page_cluster: ::prost::alloc::vec::Vec<SectionMetaData>,
2294    #[prost(message, optional, tag = "35")]
2295    pub video_annotations: ::core::option::Option<VideoAnnotations>,
2296    #[prost(message, optional, tag = "36")]
2297    pub section_purchase_related_topics: ::core::option::Option<SectionMetaData>,
2298    #[prost(message, optional, tag = "37")]
2299    pub my_subscription_details: ::core::option::Option<MySubscriptionDetails>,
2300    #[prost(message, optional, tag = "38")]
2301    pub my_reward_details: ::core::option::Option<MyRewardDetails>,
2302    #[prost(message, repeated, tag = "39")]
2303    pub feature_badge: ::prost::alloc::vec::Vec<Badge>,
2304    #[prost(message, optional, tag = "42")]
2305    pub snippet: ::core::option::Option<Snippet>,
2306    #[prost(string, optional, tag = "48")]
2307    pub downloads_label: ::core::option::Option<::prost::alloc::string::String>,
2308    #[prost(message, optional, tag = "50")]
2309    pub badge_for_rating: ::core::option::Option<Badge>,
2310    #[prost(message, optional, tag = "53")]
2311    pub category_info: ::core::option::Option<CategoryInfo>,
2312    #[prost(message, optional, tag = "60")]
2313    pub reasons: ::core::option::Option<EditorReason>,
2314    #[prost(message, optional, tag = "65")]
2315    pub top_chart_stream: ::core::option::Option<Stream>,
2316    #[prost(string, optional, tag = "66")]
2317    pub category_name: ::core::option::Option<::prost::alloc::string::String>,
2318    #[prost(message, repeated, tag = "71")]
2319    pub chip: ::prost::alloc::vec::Vec<Chip>,
2320    #[prost(message, repeated, tag = "72")]
2321    pub display_badge: ::prost::alloc::vec::Vec<Badge>,
2322    #[prost(string, optional, tag = "80")]
2323    pub live_stream_url: ::core::option::Option<::prost::alloc::string::String>,
2324    #[prost(string, optional, tag = "85")]
2325    pub promotion_stream_url: ::core::option::Option<::prost::alloc::string::String>,
2326    #[prost(message, optional, tag = "91")]
2327    pub overlay_meta_data_extra: ::core::option::Option<OverlayMetaData>,
2328    #[prost(message, optional, tag = "94")]
2329    pub section_image: ::core::option::Option<SectionImage>,
2330    #[prost(message, optional, tag = "97")]
2331    pub category_stream: ::core::option::Option<SubStream>,
2332}
2333#[allow(clippy::derive_partial_eq_without_eq)]
2334#[derive(Clone, PartialEq, ::prost::Message)]
2335pub struct EditorReason {
2336    #[prost(string, repeated, tag = "1")]
2337    pub bulletin: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2338    #[prost(string, optional, tag = "2")]
2339    pub description: ::core::option::Option<::prost::alloc::string::String>,
2340}
2341#[allow(clippy::derive_partial_eq_without_eq)]
2342#[derive(Clone, PartialEq, ::prost::Message)]
2343pub struct SectionMetaData {
2344    #[prost(string, optional, tag = "1")]
2345    pub header: ::core::option::Option<::prost::alloc::string::String>,
2346    #[prost(string, optional, tag = "2")]
2347    pub list_url: ::core::option::Option<::prost::alloc::string::String>,
2348    #[prost(string, optional, tag = "3")]
2349    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
2350    #[prost(string, optional, tag = "4")]
2351    pub description: ::core::option::Option<::prost::alloc::string::String>,
2352}
2353#[allow(clippy::derive_partial_eq_without_eq)]
2354#[derive(Clone, PartialEq, ::prost::Message)]
2355pub struct OverlayMetaData {
2356    #[prost(message, optional, tag = "1")]
2357    pub overlay_header: ::core::option::Option<OverlayHeader>,
2358    #[prost(message, optional, tag = "181")]
2359    pub overlay_title: ::core::option::Option<OverlayTitle>,
2360    #[prost(message, optional, tag = "182")]
2361    pub overlay_description: ::core::option::Option<OverlayDescription>,
2362}
2363#[allow(clippy::derive_partial_eq_without_eq)]
2364#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2365pub struct OverlayHeader {}
2366#[allow(clippy::derive_partial_eq_without_eq)]
2367#[derive(Clone, PartialEq, ::prost::Message)]
2368pub struct OverlayTitle {
2369    #[prost(string, optional, tag = "1")]
2370    pub title: ::core::option::Option<::prost::alloc::string::String>,
2371    #[prost(message, optional, tag = "3")]
2372    pub composite_image: ::core::option::Option<CompositeImage>,
2373}
2374#[allow(clippy::derive_partial_eq_without_eq)]
2375#[derive(Clone, PartialEq, ::prost::Message)]
2376pub struct CompositeImage {
2377    #[prost(int32, optional, tag = "1")]
2378    pub r#type: ::core::option::Option<i32>,
2379    #[prost(string, optional, tag = "5")]
2380    pub url: ::core::option::Option<::prost::alloc::string::String>,
2381    #[prost(int32, optional, tag = "9")]
2382    pub type_alt: ::core::option::Option<i32>,
2383    #[prost(string, optional, tag = "24")]
2384    pub title: ::core::option::Option<::prost::alloc::string::String>,
2385    #[prost(string, optional, tag = "28")]
2386    pub url_alt: ::core::option::Option<::prost::alloc::string::String>,
2387}
2388#[allow(clippy::derive_partial_eq_without_eq)]
2389#[derive(Clone, PartialEq, ::prost::Message)]
2390pub struct OverlayDescription {
2391    #[prost(string, optional, tag = "2")]
2392    pub description: ::core::option::Option<::prost::alloc::string::String>,
2393}
2394#[allow(clippy::derive_partial_eq_without_eq)]
2395#[derive(Clone, PartialEq, ::prost::Message)]
2396pub struct SuggestionReasons {
2397    #[prost(message, repeated, tag = "2")]
2398    pub reason: ::prost::alloc::vec::Vec<Reason>,
2399    #[prost(message, optional, tag = "4")]
2400    pub neutral_dismissal: ::core::option::Option<Dismissal>,
2401    #[prost(message, optional, tag = "5")]
2402    pub positive_dismissal: ::core::option::Option<Dismissal>,
2403}
2404#[allow(clippy::derive_partial_eq_without_eq)]
2405#[derive(Clone, PartialEq, ::prost::Message)]
2406pub struct Reason {
2407    #[prost(string, optional, tag = "3")]
2408    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
2409    #[prost(message, optional, tag = "4")]
2410    pub reason_plus_one: ::core::option::Option<ReasonPlusOne>,
2411    #[prost(message, optional, tag = "5")]
2412    pub reason_review: ::core::option::Option<ReasonReview>,
2413    #[prost(message, optional, tag = "7")]
2414    pub dismissal: ::core::option::Option<Dismissal>,
2415    #[prost(message, optional, tag = "9")]
2416    pub reason_user_action: ::core::option::Option<ReasonUserAction>,
2417}
2418#[allow(clippy::derive_partial_eq_without_eq)]
2419#[derive(Clone, PartialEq, ::prost::Message)]
2420pub struct ReasonPlusOne {
2421    #[prost(string, optional, tag = "1")]
2422    pub localized_description_html: ::core::option::Option<
2423        ::prost::alloc::string::String,
2424    >,
2425    #[prost(message, repeated, tag = "3")]
2426    pub user_profile: ::prost::alloc::vec::Vec<UserProfile>,
2427}
2428#[allow(clippy::derive_partial_eq_without_eq)]
2429#[derive(Clone, PartialEq, ::prost::Message)]
2430pub struct ReasonReview {
2431    #[prost(message, optional, tag = "1")]
2432    pub review: ::core::option::Option<Review>,
2433}
2434#[allow(clippy::derive_partial_eq_without_eq)]
2435#[derive(Clone, PartialEq, ::prost::Message)]
2436pub struct ReasonUserAction {
2437    #[prost(message, optional, tag = "1")]
2438    pub user_profile: ::core::option::Option<UserProfile>,
2439    #[prost(string, optional, tag = "2")]
2440    pub localized_description_html: ::core::option::Option<
2441        ::prost::alloc::string::String,
2442    >,
2443}
2444#[allow(clippy::derive_partial_eq_without_eq)]
2445#[derive(Clone, PartialEq, ::prost::Message)]
2446pub struct Dismissal {
2447    #[prost(string, optional, tag = "1")]
2448    pub url: ::core::option::Option<::prost::alloc::string::String>,
2449    #[prost(string, optional, tag = "2")]
2450    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
2451}
2452#[allow(clippy::derive_partial_eq_without_eq)]
2453#[derive(Clone, PartialEq, ::prost::Message)]
2454pub struct Snippet {
2455    #[prost(string, optional, tag = "1")]
2456    pub snippet_html: ::core::option::Option<::prost::alloc::string::String>,
2457}
2458#[allow(clippy::derive_partial_eq_without_eq)]
2459#[derive(Clone, PartialEq, ::prost::Message)]
2460pub struct MyRewardDetails {
2461    #[prost(int64, optional, tag = "1")]
2462    pub expiration_time_millis: ::core::option::Option<i64>,
2463    #[prost(string, optional, tag = "2")]
2464    pub expiration_description: ::core::option::Option<::prost::alloc::string::String>,
2465    #[prost(string, optional, tag = "3")]
2466    pub button_label: ::core::option::Option<::prost::alloc::string::String>,
2467    #[prost(message, optional, tag = "4")]
2468    pub link_action: ::core::option::Option<Link>,
2469}
2470#[allow(clippy::derive_partial_eq_without_eq)]
2471#[derive(Clone, PartialEq, ::prost::Message)]
2472pub struct MySubscriptionDetails {
2473    #[prost(string, optional, tag = "1")]
2474    pub subscription_status_html: ::core::option::Option<::prost::alloc::string::String>,
2475    #[prost(string, optional, tag = "2")]
2476    pub title: ::core::option::Option<::prost::alloc::string::String>,
2477    #[prost(string, optional, tag = "3")]
2478    pub title_by_line_html: ::core::option::Option<::prost::alloc::string::String>,
2479    #[prost(string, optional, tag = "4")]
2480    pub formatted_price: ::core::option::Option<::prost::alloc::string::String>,
2481    #[prost(string, optional, tag = "5")]
2482    pub price_by_line_html: ::core::option::Option<::prost::alloc::string::String>,
2483    #[prost(bool, optional, tag = "6")]
2484    pub cancel_subscription: ::core::option::Option<bool>,
2485    #[prost(message, optional, tag = "7")]
2486    pub payment_declined_learn_more_link: ::core::option::Option<Link>,
2487    #[prost(bool, optional, tag = "8")]
2488    pub in_trial_period: ::core::option::Option<bool>,
2489    #[prost(message, optional, tag = "9")]
2490    pub title_by_line_icon: ::core::option::Option<Image>,
2491}
2492#[allow(clippy::derive_partial_eq_without_eq)]
2493#[derive(Clone, PartialEq, ::prost::Message)]
2494pub struct VideoAnnotations {
2495    #[prost(bool, optional, tag = "1")]
2496    pub bundle: ::core::option::Option<bool>,
2497    #[prost(string, optional, tag = "2")]
2498    pub bundle_content_list_url: ::core::option::Option<::prost::alloc::string::String>,
2499    #[prost(string, optional, tag = "3")]
2500    pub extras_content_list_url: ::core::option::Option<::prost::alloc::string::String>,
2501    #[prost(string, optional, tag = "4")]
2502    pub also_available_in_list_url: ::core::option::Option<
2503        ::prost::alloc::string::String,
2504    >,
2505    #[prost(message, repeated, tag = "5")]
2506    pub bundle_doc_id: ::prost::alloc::vec::Vec<DocId>,
2507}
2508#[allow(clippy::derive_partial_eq_without_eq)]
2509#[derive(Clone, PartialEq, ::prost::Message)]
2510pub struct VoucherInfo {
2511    #[prost(message, optional, tag = "1")]
2512    pub item: ::core::option::Option<Item>,
2513    #[prost(message, repeated, tag = "2")]
2514    pub offer: ::prost::alloc::vec::Vec<Offer>,
2515}
2516#[allow(clippy::derive_partial_eq_without_eq)]
2517#[derive(Clone, PartialEq, ::prost::Message)]
2518pub struct BadgeContainer {
2519    #[prost(string, optional, tag = "1")]
2520    pub title: ::core::option::Option<::prost::alloc::string::String>,
2521    #[prost(message, repeated, tag = "2")]
2522    pub image: ::prost::alloc::vec::Vec<Image>,
2523    #[prost(message, repeated, tag = "3")]
2524    pub badge: ::prost::alloc::vec::Vec<Badge>,
2525}
2526#[allow(clippy::derive_partial_eq_without_eq)]
2527#[derive(Clone, PartialEq, ::prost::Message)]
2528pub struct OverflowLink {
2529    #[prost(string, optional, tag = "1")]
2530    pub title: ::core::option::Option<::prost::alloc::string::String>,
2531    #[prost(message, optional, tag = "2")]
2532    pub link: ::core::option::Option<Link>,
2533}
2534#[allow(clippy::derive_partial_eq_without_eq)]
2535#[derive(Clone, PartialEq, ::prost::Message)]
2536pub struct PromotedDoc {
2537    #[prost(string, optional, tag = "1")]
2538    pub title: ::core::option::Option<::prost::alloc::string::String>,
2539    #[prost(string, optional, tag = "2")]
2540    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
2541    #[prost(message, repeated, tag = "3")]
2542    pub image: ::prost::alloc::vec::Vec<Image>,
2543    #[prost(string, optional, tag = "4")]
2544    pub description: ::core::option::Option<::prost::alloc::string::String>,
2545    #[prost(string, optional, tag = "5")]
2546    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
2547}
2548#[allow(clippy::derive_partial_eq_without_eq)]
2549#[derive(Clone, PartialEq, ::prost::Message)]
2550pub struct Warning {
2551    #[prost(string, optional, tag = "1")]
2552    pub localized_message: ::core::option::Option<::prost::alloc::string::String>,
2553}
2554#[allow(clippy::derive_partial_eq_without_eq)]
2555#[derive(Clone, PartialEq, ::prost::Message)]
2556pub struct AnnotationLink {
2557    #[prost(string, optional, tag = "1")]
2558    pub uri: ::core::option::Option<::prost::alloc::string::String>,
2559    #[prost(message, optional, tag = "2")]
2560    pub resolved_link: ::core::option::Option<ResolvedLink>,
2561    #[prost(int32, optional, tag = "3")]
2562    pub uri_backend: ::core::option::Option<i32>,
2563}
2564#[allow(clippy::derive_partial_eq_without_eq)]
2565#[derive(Clone, PartialEq, ::prost::Message)]
2566pub struct Rated {
2567    #[prost(string, optional, tag = "1")]
2568    pub label: ::core::option::Option<::prost::alloc::string::String>,
2569    #[prost(message, optional, tag = "2")]
2570    pub image: ::core::option::Option<Image>,
2571    #[prost(string, optional, tag = "4")]
2572    pub learn_more_html_link: ::core::option::Option<::prost::alloc::string::String>,
2573}
2574#[allow(clippy::derive_partial_eq_without_eq)]
2575#[derive(Clone, PartialEq, ::prost::Message)]
2576pub struct Badge {
2577    #[prost(string, optional, tag = "1")]
2578    pub major: ::core::option::Option<::prost::alloc::string::String>,
2579    #[prost(message, optional, tag = "2")]
2580    pub image: ::core::option::Option<Image>,
2581    #[prost(string, optional, tag = "3")]
2582    pub minor: ::core::option::Option<::prost::alloc::string::String>,
2583    #[prost(string, optional, tag = "4")]
2584    pub minor_html: ::core::option::Option<::prost::alloc::string::String>,
2585    #[prost(message, optional, tag = "6")]
2586    pub sub_badge: ::core::option::Option<SubBadge>,
2587    #[prost(message, optional, tag = "7")]
2588    pub link: ::core::option::Option<StreamLink>,
2589    #[prost(string, optional, tag = "8")]
2590    pub description: ::core::option::Option<::prost::alloc::string::String>,
2591    #[prost(message, optional, tag = "12")]
2592    pub stream: ::core::option::Option<SubStream>,
2593}
2594#[allow(clippy::derive_partial_eq_without_eq)]
2595#[derive(Clone, PartialEq, ::prost::Message)]
2596pub struct SubBadge {
2597    #[prost(message, optional, tag = "1")]
2598    pub image: ::core::option::Option<Image>,
2599    #[prost(string, optional, tag = "4")]
2600    pub description: ::core::option::Option<::prost::alloc::string::String>,
2601    #[prost(message, optional, tag = "5")]
2602    pub link: ::core::option::Option<StreamLink>,
2603}
2604#[allow(clippy::derive_partial_eq_without_eq)]
2605#[derive(Clone, PartialEq, ::prost::Message)]
2606pub struct Stream {
2607    #[prost(string, optional, tag = "1")]
2608    pub title: ::core::option::Option<::prost::alloc::string::String>,
2609    #[prost(message, optional, tag = "2")]
2610    pub stream: ::core::option::Option<SubStream>,
2611    #[prost(string, optional, tag = "3")]
2612    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
2613}
2614#[allow(clippy::derive_partial_eq_without_eq)]
2615#[derive(Clone, PartialEq, ::prost::Message)]
2616pub struct SubStream {
2617    #[prost(message, optional, tag = "2")]
2618    pub link: ::core::option::Option<StreamLink>,
2619}
2620#[allow(clippy::derive_partial_eq_without_eq)]
2621#[derive(Clone, PartialEq, ::prost::Message)]
2622pub struct Link {
2623    #[prost(string, optional, tag = "1")]
2624    pub uri: ::core::option::Option<::prost::alloc::string::String>,
2625    #[prost(message, optional, tag = "2")]
2626    pub resolved_link: ::core::option::Option<ResolvedLink>,
2627    #[prost(int32, optional, tag = "3")]
2628    pub uri_backend: ::core::option::Option<i32>,
2629}
2630#[allow(clippy::derive_partial_eq_without_eq)]
2631#[derive(Clone, PartialEq, ::prost::Message)]
2632pub struct StreamLink {
2633    #[prost(string, optional, tag = "1")]
2634    pub url: ::core::option::Option<::prost::alloc::string::String>,
2635    #[prost(string, optional, tag = "2")]
2636    pub stream_url: ::core::option::Option<::prost::alloc::string::String>,
2637    #[prost(string, optional, tag = "3")]
2638    pub search_url: ::core::option::Option<::prost::alloc::string::String>,
2639    #[prost(string, optional, tag = "5")]
2640    pub sub_category_url: ::core::option::Option<::prost::alloc::string::String>,
2641    #[prost(string, optional, tag = "11")]
2642    pub search_query: ::core::option::Option<::prost::alloc::string::String>,
2643}
2644#[allow(clippy::derive_partial_eq_without_eq)]
2645#[derive(Clone, PartialEq, ::prost::Message)]
2646pub struct Chip {
2647    #[prost(string, optional, tag = "1")]
2648    pub title: ::core::option::Option<::prost::alloc::string::String>,
2649    #[prost(message, optional, tag = "2")]
2650    pub stream: ::core::option::Option<SubStream>,
2651}
2652#[allow(clippy::derive_partial_eq_without_eq)]
2653#[derive(Clone, PartialEq, ::prost::Message)]
2654pub struct CategoryInfo {
2655    #[prost(string, optional, tag = "1")]
2656    pub category: ::core::option::Option<::prost::alloc::string::String>,
2657    #[prost(string, optional, tag = "2")]
2658    pub app_category: ::core::option::Option<::prost::alloc::string::String>,
2659}
2660#[allow(clippy::derive_partial_eq_without_eq)]
2661#[derive(Clone, PartialEq, ::prost::Message)]
2662pub struct EncryptedSubscriberInfo {
2663    #[prost(string, optional, tag = "1")]
2664    pub data: ::core::option::Option<::prost::alloc::string::String>,
2665    #[prost(string, optional, tag = "2")]
2666    pub encrypted_key: ::core::option::Option<::prost::alloc::string::String>,
2667    #[prost(string, optional, tag = "3")]
2668    pub signature: ::core::option::Option<::prost::alloc::string::String>,
2669    #[prost(string, optional, tag = "4")]
2670    pub init_vector: ::core::option::Option<::prost::alloc::string::String>,
2671    #[prost(int32, optional, tag = "5")]
2672    pub google_key_version: ::core::option::Option<i32>,
2673    #[prost(int32, optional, tag = "6")]
2674    pub carrier_key_version: ::core::option::Option<i32>,
2675}
2676#[allow(clippy::derive_partial_eq_without_eq)]
2677#[derive(Clone, PartialEq, ::prost::Message)]
2678pub struct Availability {
2679    #[prost(int32, optional, tag = "5")]
2680    pub restriction: ::core::option::Option<i32>,
2681    #[prost(int32, optional, tag = "6")]
2682    pub offer_type: ::core::option::Option<i32>,
2683    #[prost(message, optional, tag = "7")]
2684    pub rule: ::core::option::Option<Rule>,
2685    #[prost(group, repeated, tag = "9")]
2686    pub perdeviceavailabilityrestriction: ::prost::alloc::vec::Vec<
2687        availability::PerDeviceAvailabilityRestriction,
2688    >,
2689    #[prost(bool, optional, tag = "13")]
2690    pub available_if_owned: ::core::option::Option<bool>,
2691    #[prost(message, repeated, tag = "14")]
2692    pub install: ::prost::alloc::vec::Vec<Install>,
2693    #[prost(message, optional, tag = "16")]
2694    pub filter_info: ::core::option::Option<FilterEvaluationInfo>,
2695    #[prost(message, optional, tag = "17")]
2696    pub ownership_info: ::core::option::Option<OwnershipInfo>,
2697    #[prost(message, repeated, tag = "18")]
2698    pub availability_problem: ::prost::alloc::vec::Vec<AvailabilityProblem>,
2699    #[prost(bool, optional, tag = "21")]
2700    pub hidden: ::core::option::Option<bool>,
2701}
2702/// Nested message and enum types in `Availability`.
2703pub mod availability {
2704    #[allow(clippy::derive_partial_eq_without_eq)]
2705    #[derive(Clone, PartialEq, ::prost::Message)]
2706    pub struct PerDeviceAvailabilityRestriction {
2707        #[prost(fixed64, optional, tag = "10")]
2708        pub android_id: ::core::option::Option<u64>,
2709        #[prost(int32, optional, tag = "11")]
2710        pub device_restriction: ::core::option::Option<i32>,
2711        #[prost(int64, optional, tag = "12")]
2712        pub channel_id: ::core::option::Option<i64>,
2713        #[prost(message, optional, tag = "15")]
2714        pub filter_info: ::core::option::Option<super::FilterEvaluationInfo>,
2715    }
2716}
2717#[allow(clippy::derive_partial_eq_without_eq)]
2718#[derive(Clone, PartialEq, ::prost::Message)]
2719pub struct AvailabilityProblem {
2720    #[prost(int32, optional, tag = "1")]
2721    pub problem_type: ::core::option::Option<i32>,
2722    #[prost(string, repeated, tag = "2")]
2723    pub missing_value: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2724}
2725#[allow(clippy::derive_partial_eq_without_eq)]
2726#[derive(Clone, PartialEq, ::prost::Message)]
2727pub struct FilterEvaluationInfo {
2728    #[prost(message, repeated, tag = "1")]
2729    pub rule_evaluation: ::prost::alloc::vec::Vec<RuleEvaluation>,
2730}
2731#[allow(clippy::derive_partial_eq_without_eq)]
2732#[derive(Clone, PartialEq, ::prost::Message)]
2733pub struct Rule {
2734    #[prost(bool, optional, tag = "1")]
2735    pub negate: ::core::option::Option<bool>,
2736    #[prost(int32, optional, tag = "2")]
2737    pub operator: ::core::option::Option<i32>,
2738    #[prost(int32, optional, tag = "3")]
2739    pub key: ::core::option::Option<i32>,
2740    #[prost(string, repeated, tag = "4")]
2741    pub string_arg: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2742    #[prost(int64, repeated, packed = "false", tag = "5")]
2743    pub long_arg: ::prost::alloc::vec::Vec<i64>,
2744    #[prost(double, repeated, packed = "false", tag = "6")]
2745    pub double_arg: ::prost::alloc::vec::Vec<f64>,
2746    #[prost(message, repeated, tag = "7")]
2747    pub sub_rule: ::prost::alloc::vec::Vec<Rule>,
2748    #[prost(int32, optional, tag = "8")]
2749    pub response_code: ::core::option::Option<i32>,
2750    #[prost(string, optional, tag = "9")]
2751    pub comment: ::core::option::Option<::prost::alloc::string::String>,
2752    #[prost(fixed64, repeated, packed = "false", tag = "10")]
2753    pub string_arg_hash: ::prost::alloc::vec::Vec<u64>,
2754    #[prost(int32, repeated, packed = "false", tag = "11")]
2755    pub const_arg: ::prost::alloc::vec::Vec<i32>,
2756    #[prost(int32, optional, tag = "12")]
2757    pub availability_problem_type: ::core::option::Option<i32>,
2758    #[prost(bool, optional, tag = "13")]
2759    pub include_missing_values: ::core::option::Option<bool>,
2760}
2761#[allow(clippy::derive_partial_eq_without_eq)]
2762#[derive(Clone, PartialEq, ::prost::Message)]
2763pub struct RuleEvaluation {
2764    #[prost(message, optional, tag = "1")]
2765    pub rule: ::core::option::Option<Rule>,
2766    #[prost(string, repeated, tag = "2")]
2767    pub actual_string_value: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2768    #[prost(int64, repeated, packed = "false", tag = "3")]
2769    pub actual_long_value: ::prost::alloc::vec::Vec<i64>,
2770    #[prost(bool, repeated, packed = "false", tag = "4")]
2771    pub actual_bool_value: ::prost::alloc::vec::Vec<bool>,
2772    #[prost(double, repeated, packed = "false", tag = "5")]
2773    pub actual_double_value: ::prost::alloc::vec::Vec<f64>,
2774}
2775#[allow(clippy::derive_partial_eq_without_eq)]
2776#[derive(Clone, PartialEq, ::prost::Message)]
2777pub struct LibraryAppDetails {
2778    #[prost(string, optional, tag = "2")]
2779    pub certificate_hash: ::core::option::Option<::prost::alloc::string::String>,
2780    #[prost(int64, optional, tag = "3")]
2781    pub refund_timeout_timestamp: ::core::option::Option<i64>,
2782    #[prost(int64, optional, tag = "4")]
2783    pub post_delivery_refund_window_millis: ::core::option::Option<i64>,
2784}
2785#[allow(clippy::derive_partial_eq_without_eq)]
2786#[derive(Clone, PartialEq, ::prost::Message)]
2787pub struct LibraryInAppDetails {
2788    #[prost(string, optional, tag = "1")]
2789    pub signed_purchase_data: ::core::option::Option<::prost::alloc::string::String>,
2790    #[prost(string, optional, tag = "2")]
2791    pub signature: ::core::option::Option<::prost::alloc::string::String>,
2792}
2793#[allow(clippy::derive_partial_eq_without_eq)]
2794#[derive(Clone, PartialEq, ::prost::Message)]
2795pub struct LibraryMutation {
2796    #[prost(message, optional, tag = "1")]
2797    pub doc_id: ::core::option::Option<DocId>,
2798    #[prost(int32, optional, tag = "2")]
2799    pub offer_type: ::core::option::Option<i32>,
2800    #[prost(int64, optional, tag = "3")]
2801    pub document_hash: ::core::option::Option<i64>,
2802    #[prost(bool, optional, tag = "4")]
2803    pub deleted: ::core::option::Option<bool>,
2804    #[prost(message, optional, tag = "5")]
2805    pub app_details: ::core::option::Option<LibraryAppDetails>,
2806    #[prost(message, optional, tag = "6")]
2807    pub subscription_details: ::core::option::Option<LibrarySubscriptionDetails>,
2808    #[prost(message, optional, tag = "7")]
2809    pub in_app_details: ::core::option::Option<LibraryInAppDetails>,
2810}
2811#[allow(clippy::derive_partial_eq_without_eq)]
2812#[derive(Clone, PartialEq, ::prost::Message)]
2813pub struct LibrarySubscriptionDetails {
2814    #[prost(int64, optional, tag = "1")]
2815    pub initiation_timestamp: ::core::option::Option<i64>,
2816    #[prost(int64, optional, tag = "2")]
2817    pub valid_until_timestamp: ::core::option::Option<i64>,
2818    #[prost(bool, optional, tag = "3")]
2819    pub auto_renewing: ::core::option::Option<bool>,
2820    #[prost(int64, optional, tag = "4")]
2821    pub trial_until_timestamp: ::core::option::Option<i64>,
2822    #[prost(string, optional, tag = "5")]
2823    pub signed_purchase_data: ::core::option::Option<::prost::alloc::string::String>,
2824    #[prost(string, optional, tag = "6")]
2825    pub signature: ::core::option::Option<::prost::alloc::string::String>,
2826}
2827#[allow(clippy::derive_partial_eq_without_eq)]
2828#[derive(Clone, PartialEq, ::prost::Message)]
2829pub struct LibraryUpdate {
2830    #[prost(int32, optional, tag = "1")]
2831    pub status: ::core::option::Option<i32>,
2832    #[prost(int32, optional, tag = "2")]
2833    pub corpus: ::core::option::Option<i32>,
2834    #[prost(bytes = "vec", optional, tag = "3")]
2835    pub server_token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
2836    #[prost(message, repeated, tag = "4")]
2837    pub mutation: ::prost::alloc::vec::Vec<LibraryMutation>,
2838    #[prost(bool, optional, tag = "5")]
2839    pub has_more: ::core::option::Option<bool>,
2840    #[prost(string, optional, tag = "6")]
2841    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
2842}
2843#[allow(clippy::derive_partial_eq_without_eq)]
2844#[derive(Clone, PartialEq, ::prost::Message)]
2845pub struct AndroidAppNotificationData {
2846    #[prost(int32, optional, tag = "1")]
2847    pub version_code: ::core::option::Option<i32>,
2848    #[prost(string, optional, tag = "2")]
2849    pub asset_id: ::core::option::Option<::prost::alloc::string::String>,
2850}
2851#[allow(clippy::derive_partial_eq_without_eq)]
2852#[derive(Clone, PartialEq, ::prost::Message)]
2853pub struct InAppNotificationData {
2854    #[prost(string, optional, tag = "1")]
2855    pub checkout_order_id: ::core::option::Option<::prost::alloc::string::String>,
2856    #[prost(string, optional, tag = "2")]
2857    pub in_app_notification_id: ::core::option::Option<::prost::alloc::string::String>,
2858}
2859#[allow(clippy::derive_partial_eq_without_eq)]
2860#[derive(Clone, PartialEq, ::prost::Message)]
2861pub struct LibraryDirtyData {
2862    #[prost(int32, optional, tag = "1")]
2863    pub backend: ::core::option::Option<i32>,
2864    #[prost(string, optional, tag = "2")]
2865    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
2866}
2867#[allow(clippy::derive_partial_eq_without_eq)]
2868#[derive(Clone, PartialEq, ::prost::Message)]
2869pub struct Notification {
2870    #[prost(int32, optional, tag = "1")]
2871    pub notification_type: ::core::option::Option<i32>,
2872    #[prost(int64, optional, tag = "3")]
2873    pub timestamp: ::core::option::Option<i64>,
2874    #[prost(message, optional, tag = "4")]
2875    pub doc_id: ::core::option::Option<DocId>,
2876    #[prost(string, optional, tag = "5")]
2877    pub doc_title: ::core::option::Option<::prost::alloc::string::String>,
2878    #[prost(string, optional, tag = "6")]
2879    pub user_email: ::core::option::Option<::prost::alloc::string::String>,
2880    #[prost(message, optional, tag = "7")]
2881    pub app_data: ::core::option::Option<AndroidAppNotificationData>,
2882    #[prost(message, optional, tag = "8")]
2883    pub app_delivery_data: ::core::option::Option<AndroidAppDeliveryData>,
2884    #[prost(message, optional, tag = "9")]
2885    pub purchase_removal_data: ::core::option::Option<PurchaseRemovalData>,
2886    #[prost(message, optional, tag = "10")]
2887    pub user_notification_data: ::core::option::Option<UserNotificationData>,
2888    #[prost(message, optional, tag = "11")]
2889    pub in_app_notification_data: ::core::option::Option<InAppNotificationData>,
2890    #[prost(message, optional, tag = "12")]
2891    pub purchase_declined_data: ::core::option::Option<PurchaseDeclinedData>,
2892    #[prost(string, optional, tag = "13")]
2893    pub notification_id: ::core::option::Option<::prost::alloc::string::String>,
2894    #[prost(message, optional, tag = "14")]
2895    pub library_update: ::core::option::Option<LibraryUpdate>,
2896    #[prost(message, optional, tag = "15")]
2897    pub library_dirty_data: ::core::option::Option<LibraryDirtyData>,
2898}
2899#[allow(clippy::derive_partial_eq_without_eq)]
2900#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2901pub struct PurchaseDeclinedData {
2902    #[prost(int32, optional, tag = "1")]
2903    pub reason: ::core::option::Option<i32>,
2904    #[prost(bool, optional, tag = "2")]
2905    pub show_notification: ::core::option::Option<bool>,
2906}
2907#[allow(clippy::derive_partial_eq_without_eq)]
2908#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2909pub struct PurchaseRemovalData {
2910    #[prost(bool, optional, tag = "1")]
2911    pub malicious: ::core::option::Option<bool>,
2912}
2913#[allow(clippy::derive_partial_eq_without_eq)]
2914#[derive(Clone, PartialEq, ::prost::Message)]
2915pub struct UserNotificationData {
2916    #[prost(string, optional, tag = "1")]
2917    pub notification_title: ::core::option::Option<::prost::alloc::string::String>,
2918    #[prost(string, optional, tag = "2")]
2919    pub notification_text: ::core::option::Option<::prost::alloc::string::String>,
2920    #[prost(string, optional, tag = "3")]
2921    pub ticker_text: ::core::option::Option<::prost::alloc::string::String>,
2922    #[prost(string, optional, tag = "4")]
2923    pub dialog_title: ::core::option::Option<::prost::alloc::string::String>,
2924    #[prost(string, optional, tag = "5")]
2925    pub dialog_text: ::core::option::Option<::prost::alloc::string::String>,
2926}
2927#[allow(clippy::derive_partial_eq_without_eq)]
2928#[derive(Clone, PartialEq, ::prost::Message)]
2929pub struct AggregateRating {
2930    #[prost(int32, optional, tag = "1", default = "1")]
2931    pub r#type: ::core::option::Option<i32>,
2932    #[prost(float, optional, tag = "2")]
2933    pub star_rating: ::core::option::Option<f32>,
2934    #[prost(uint64, optional, tag = "3")]
2935    pub ratings_count: ::core::option::Option<u64>,
2936    #[prost(uint64, optional, tag = "4")]
2937    pub one_star_ratings: ::core::option::Option<u64>,
2938    #[prost(uint64, optional, tag = "5")]
2939    pub two_star_ratings: ::core::option::Option<u64>,
2940    #[prost(uint64, optional, tag = "6")]
2941    pub three_star_ratings: ::core::option::Option<u64>,
2942    #[prost(uint64, optional, tag = "7")]
2943    pub four_star_ratings: ::core::option::Option<u64>,
2944    #[prost(uint64, optional, tag = "8")]
2945    pub five_star_ratings: ::core::option::Option<u64>,
2946    #[prost(uint64, optional, tag = "9")]
2947    pub thumbs_up_count: ::core::option::Option<u64>,
2948    #[prost(uint64, optional, tag = "10")]
2949    pub thumbs_down_count: ::core::option::Option<u64>,
2950    #[prost(uint64, optional, tag = "11")]
2951    pub comment_count: ::core::option::Option<u64>,
2952    #[prost(double, optional, tag = "12")]
2953    pub bayesian_mean_rating: ::core::option::Option<f64>,
2954    #[prost(message, repeated, tag = "13")]
2955    pub tip: ::prost::alloc::vec::Vec<Tip>,
2956    #[prost(string, optional, tag = "17")]
2957    pub rating_label: ::core::option::Option<::prost::alloc::string::String>,
2958    #[prost(string, optional, tag = "18")]
2959    pub rating_count_label_abbreviated: ::core::option::Option<
2960        ::prost::alloc::string::String,
2961    >,
2962    #[prost(string, optional, tag = "19")]
2963    pub rating_count_label: ::core::option::Option<::prost::alloc::string::String>,
2964}
2965#[allow(clippy::derive_partial_eq_without_eq)]
2966#[derive(Clone, PartialEq, ::prost::Message)]
2967pub struct Tip {
2968    #[prost(string, optional, tag = "1")]
2969    pub tip_id: ::core::option::Option<::prost::alloc::string::String>,
2970    #[prost(string, optional, tag = "2")]
2971    pub text: ::core::option::Option<::prost::alloc::string::String>,
2972    #[prost(int32, optional, tag = "3")]
2973    pub polarity: ::core::option::Option<i32>,
2974    #[prost(int64, optional, tag = "4")]
2975    pub review_count: ::core::option::Option<i64>,
2976    #[prost(string, optional, tag = "5")]
2977    pub language: ::core::option::Option<::prost::alloc::string::String>,
2978    #[prost(string, repeated, tag = "6")]
2979    pub snippet_review_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2980}
2981#[allow(clippy::derive_partial_eq_without_eq)]
2982#[derive(Clone, PartialEq, ::prost::Message)]
2983pub struct ReviewTip {
2984    #[prost(string, optional, tag = "1")]
2985    pub tip_url: ::core::option::Option<::prost::alloc::string::String>,
2986    #[prost(string, optional, tag = "2")]
2987    pub text: ::core::option::Option<::prost::alloc::string::String>,
2988    #[prost(int32, optional, tag = "3")]
2989    pub polarity: ::core::option::Option<i32>,
2990    #[prost(int64, optional, tag = "4")]
2991    pub review_count: ::core::option::Option<i64>,
2992}
2993#[allow(clippy::derive_partial_eq_without_eq)]
2994#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2995pub struct AcceptTosResponse {}
2996#[allow(clippy::derive_partial_eq_without_eq)]
2997#[derive(Clone, PartialEq, ::prost::Message)]
2998pub struct CarrierBillingConfig {
2999    #[prost(string, optional, tag = "1")]
3000    pub id: ::core::option::Option<::prost::alloc::string::String>,
3001    #[prost(string, optional, tag = "2")]
3002    pub name: ::core::option::Option<::prost::alloc::string::String>,
3003    #[prost(int32, optional, tag = "3")]
3004    pub api_version: ::core::option::Option<i32>,
3005    #[prost(string, optional, tag = "4")]
3006    pub provisioning_url: ::core::option::Option<::prost::alloc::string::String>,
3007    #[prost(string, optional, tag = "5")]
3008    pub credentials_url: ::core::option::Option<::prost::alloc::string::String>,
3009    #[prost(bool, optional, tag = "6")]
3010    pub tos_required: ::core::option::Option<bool>,
3011    #[prost(bool, optional, tag = "7")]
3012    pub per_transaction_credentials_required: ::core::option::Option<bool>,
3013    #[prost(bool, optional, tag = "8")]
3014    pub send_subscriber_id_with_carrier_billing_requests: ::core::option::Option<bool>,
3015}
3016#[allow(clippy::derive_partial_eq_without_eq)]
3017#[derive(Clone, PartialEq, ::prost::Message)]
3018pub struct BillingConfig {
3019    #[prost(message, optional, tag = "1")]
3020    pub carrier_billing_config: ::core::option::Option<CarrierBillingConfig>,
3021    #[prost(int32, optional, tag = "2")]
3022    pub max_iab_api_version: ::core::option::Option<i32>,
3023}
3024#[allow(clippy::derive_partial_eq_without_eq)]
3025#[derive(Clone, PartialEq, ::prost::Message)]
3026pub struct CorpusMetadata {
3027    #[prost(int32, optional, tag = "1")]
3028    pub backend: ::core::option::Option<i32>,
3029    #[prost(string, optional, tag = "2")]
3030    pub name: ::core::option::Option<::prost::alloc::string::String>,
3031    #[prost(string, optional, tag = "3")]
3032    pub landing_url: ::core::option::Option<::prost::alloc::string::String>,
3033    #[prost(string, optional, tag = "4")]
3034    pub library_name: ::core::option::Option<::prost::alloc::string::String>,
3035    #[prost(string, optional, tag = "6")]
3036    pub recs_widget_url: ::core::option::Option<::prost::alloc::string::String>,
3037    #[prost(string, optional, tag = "7")]
3038    pub shop_name: ::core::option::Option<::prost::alloc::string::String>,
3039}
3040#[allow(clippy::derive_partial_eq_without_eq)]
3041#[derive(Clone, PartialEq, ::prost::Message)]
3042pub struct Experiments {
3043    #[prost(string, repeated, tag = "1")]
3044    pub experiment_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3045}
3046#[allow(clippy::derive_partial_eq_without_eq)]
3047#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3048pub struct SelfUpdateConfig {
3049    #[prost(int32, optional, tag = "1")]
3050    pub latest_client_version_code: ::core::option::Option<i32>,
3051}
3052#[allow(clippy::derive_partial_eq_without_eq)]
3053#[derive(Clone, PartialEq, ::prost::Message)]
3054pub struct TocResponse {
3055    #[prost(message, repeated, tag = "1")]
3056    pub corpus: ::prost::alloc::vec::Vec<CorpusMetadata>,
3057    #[prost(int32, optional, tag = "2")]
3058    pub tos_version_deprecated: ::core::option::Option<i32>,
3059    #[prost(string, optional, tag = "3")]
3060    pub tos_content: ::core::option::Option<::prost::alloc::string::String>,
3061    #[prost(string, optional, tag = "4")]
3062    pub home_url: ::core::option::Option<::prost::alloc::string::String>,
3063    #[prost(message, optional, tag = "5")]
3064    pub experiments: ::core::option::Option<Experiments>,
3065    #[prost(string, optional, tag = "6")]
3066    pub tos_checkbox_text_marketing_emails: ::core::option::Option<
3067        ::prost::alloc::string::String,
3068    >,
3069    #[prost(string, optional, tag = "7")]
3070    pub tos_token: ::core::option::Option<::prost::alloc::string::String>,
3071    #[prost(message, optional, tag = "8")]
3072    pub user_settings: ::core::option::Option<UserSettings>,
3073    #[prost(string, optional, tag = "9")]
3074    pub icon_override_url: ::core::option::Option<::prost::alloc::string::String>,
3075    #[prost(message, optional, tag = "10")]
3076    pub self_update_config: ::core::option::Option<SelfUpdateConfig>,
3077    #[prost(bool, optional, tag = "11")]
3078    pub requires_upload_device_config: ::core::option::Option<bool>,
3079    #[prost(message, optional, tag = "12")]
3080    pub billing_config: ::core::option::Option<BillingConfig>,
3081    #[prost(string, optional, tag = "13")]
3082    pub recs_widget_url: ::core::option::Option<::prost::alloc::string::String>,
3083    #[prost(string, optional, tag = "15")]
3084    pub social_home_url: ::core::option::Option<::prost::alloc::string::String>,
3085    #[prost(bool, optional, tag = "16")]
3086    pub age_verification_required: ::core::option::Option<bool>,
3087    #[prost(bool, optional, tag = "17")]
3088    pub g_plus_signup_enabled: ::core::option::Option<bool>,
3089    #[prost(bool, optional, tag = "18")]
3090    pub redeem_enabled: ::core::option::Option<bool>,
3091    #[prost(string, optional, tag = "19")]
3092    pub help_url: ::core::option::Option<::prost::alloc::string::String>,
3093    #[prost(int32, optional, tag = "20")]
3094    pub theme_id: ::core::option::Option<i32>,
3095    #[prost(string, optional, tag = "21")]
3096    pub entertainment_home_url: ::core::option::Option<::prost::alloc::string::String>,
3097    #[prost(string, optional, tag = "22")]
3098    pub cookie: ::core::option::Option<::prost::alloc::string::String>,
3099}
3100#[allow(clippy::derive_partial_eq_without_eq)]
3101#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3102pub struct UserSettings {
3103    #[prost(bool, optional, tag = "1")]
3104    pub tos_checkbox_marketing_emails_opted_in: ::core::option::Option<bool>,
3105    #[prost(message, optional, tag = "2")]
3106    pub privacy_setting: ::core::option::Option<PrivacySetting>,
3107}
3108#[allow(clippy::derive_partial_eq_without_eq)]
3109#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3110pub struct PrivacySetting {
3111    #[prost(int32, optional, tag = "1")]
3112    pub r#type: ::core::option::Option<i32>,
3113    #[prost(int32, optional, tag = "2")]
3114    pub current_status: ::core::option::Option<i32>,
3115    #[prost(bool, optional, tag = "3")]
3116    pub enabled_by_default: ::core::option::Option<bool>,
3117}
3118#[allow(clippy::derive_partial_eq_without_eq)]
3119#[derive(Clone, PartialEq, ::prost::Message)]
3120pub struct Payload {
3121    #[prost(message, optional, tag = "1")]
3122    pub list_response: ::core::option::Option<ListResponse>,
3123    #[prost(message, optional, tag = "2")]
3124    pub details_response: ::core::option::Option<DetailsResponse>,
3125    #[prost(message, optional, tag = "3")]
3126    pub review_response: ::core::option::Option<ReviewResponse>,
3127    #[prost(message, optional, tag = "4")]
3128    pub buy_response: ::core::option::Option<BuyResponse>,
3129    #[prost(message, optional, tag = "5")]
3130    pub search_response: ::core::option::Option<SearchResponse>,
3131    #[prost(message, optional, tag = "6")]
3132    pub toc_response: ::core::option::Option<TocResponse>,
3133    #[prost(message, optional, tag = "7")]
3134    pub browse_response: ::core::option::Option<BrowseResponse>,
3135    #[prost(message, optional, tag = "8")]
3136    pub purchase_status_response: ::core::option::Option<PurchaseStatusResponse>,
3137    #[prost(string, optional, tag = "10")]
3138    pub log_response: ::core::option::Option<::prost::alloc::string::String>,
3139    #[prost(string, optional, tag = "13")]
3140    pub flag_content_response: ::core::option::Option<::prost::alloc::string::String>,
3141    #[prost(message, optional, tag = "19")]
3142    pub bulk_details_response: ::core::option::Option<BulkDetailsResponse>,
3143    #[prost(message, optional, tag = "21")]
3144    pub delivery_response: ::core::option::Option<DeliveryResponse>,
3145    #[prost(message, optional, tag = "22")]
3146    pub accept_tos_response: ::core::option::Option<AcceptTosResponse>,
3147    #[prost(message, optional, tag = "24")]
3148    pub check_promo_offer_response: ::core::option::Option<CheckPromoOfferResponse>,
3149    #[prost(message, optional, tag = "25")]
3150    pub instrument_setup_info_response: ::core::option::Option<
3151        InstrumentSetupInfoResponse,
3152    >,
3153    #[prost(message, optional, tag = "26")]
3154    pub android_checkin_response: ::core::option::Option<AndroidCheckinResponse>,
3155    #[prost(message, optional, tag = "28")]
3156    pub upload_device_config_response: ::core::option::Option<
3157        UploadDeviceConfigResponse,
3158    >,
3159    #[prost(message, optional, tag = "40")]
3160    pub search_suggest_response: ::core::option::Option<SearchSuggestResponse>,
3161    #[prost(message, optional, tag = "30")]
3162    pub consume_purchase_response: ::core::option::Option<ConsumePurchaseResponse>,
3163    #[prost(message, optional, tag = "31")]
3164    pub billing_profile_response: ::core::option::Option<BillingProfileResponse>,
3165    #[prost(message, optional, tag = "34")]
3166    pub debug_settings_response: ::core::option::Option<DebugSettingsResponse>,
3167    #[prost(message, optional, tag = "35")]
3168    pub check_iab_promo_response: ::core::option::Option<CheckIabPromoResponse>,
3169    #[prost(message, optional, tag = "36")]
3170    pub user_activity_settings_response: ::core::option::Option<
3171        UserActivitySettingsResponse,
3172    >,
3173    #[prost(message, optional, tag = "37")]
3174    pub record_user_activity_response: ::core::option::Option<
3175        RecordUserActivityResponse,
3176    >,
3177    #[prost(message, optional, tag = "38")]
3178    pub redeem_code_response: ::core::option::Option<RedeemCodeResponse>,
3179    #[prost(message, optional, tag = "39")]
3180    pub self_update_response: ::core::option::Option<SelfUpdateResponse>,
3181    #[prost(message, optional, tag = "41")]
3182    pub get_initial_instrument_flow_state_response: ::core::option::Option<
3183        GetInitialInstrumentFlowStateResponse,
3184    >,
3185    #[prost(message, optional, tag = "42")]
3186    pub create_instrument_response: ::core::option::Option<CreateInstrumentResponse>,
3187    #[prost(message, optional, tag = "43")]
3188    pub challenge_response: ::core::option::Option<ChallengeResponse>,
3189    #[prost(message, optional, tag = "44")]
3190    pub backup_device_choices_response: ::core::option::Option<
3191        BackDeviceChoicesResponse,
3192    >,
3193    #[prost(message, optional, tag = "45")]
3194    pub backup_document_choices_response: ::core::option::Option<
3195        BackupDocumentChoicesResponse,
3196    >,
3197    #[prost(message, optional, tag = "46")]
3198    pub early_update_response: ::core::option::Option<EarlyUpdateResponse>,
3199    #[prost(message, optional, tag = "47")]
3200    pub preloads_response: ::core::option::Option<PreloadsResponse>,
3201    #[prost(message, optional, tag = "48")]
3202    pub my_accounts_response: ::core::option::Option<MyAccountsResponse>,
3203    #[prost(message, optional, tag = "49")]
3204    pub content_filter_response: ::core::option::Option<ContentFilterResponse>,
3205    #[prost(message, optional, tag = "50")]
3206    pub experiments_response: ::core::option::Option<ExperimentsResponse>,
3207    #[prost(message, optional, tag = "51")]
3208    pub survey_response: ::core::option::Option<SurveyResponse>,
3209    #[prost(message, optional, tag = "52")]
3210    pub ping_response: ::core::option::Option<PingResponse>,
3211    #[prost(message, optional, tag = "53")]
3212    pub update_user_setting_response: ::core::option::Option<UpdateUserSettingResponse>,
3213    #[prost(message, optional, tag = "54")]
3214    pub get_user_settings_response: ::core::option::Option<GetUserSettingsResponse>,
3215    #[prost(message, optional, tag = "56")]
3216    pub get_sharing_settings_response: ::core::option::Option<
3217        GetSharingSettingsResponse,
3218    >,
3219    #[prost(message, optional, tag = "57")]
3220    pub update_sharing_settings_response: ::core::option::Option<
3221        UpdateSharingSettingsResponse,
3222    >,
3223    #[prost(message, optional, tag = "58")]
3224    pub review_snippets_response: ::core::option::Option<ReviewSnippetsResponse>,
3225    #[prost(message, optional, tag = "59")]
3226    pub document_sharing_state_response: ::core::option::Option<
3227        DocumentSharingStateResponse,
3228    >,
3229    #[prost(message, optional, tag = "70")]
3230    pub module_delivery_response: ::core::option::Option<ModuleDeliveryResponse>,
3231    #[prost(message, optional, tag = "80")]
3232    pub testing_program_response: ::core::option::Option<TestingProgramResponse>,
3233    #[prost(message, optional, tag = "129")]
3234    pub review_summary_response: ::core::option::Option<ReviewResponse>,
3235}
3236#[allow(clippy::derive_partial_eq_without_eq)]
3237#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3238pub struct CheckIabPromoResponse {}
3239#[allow(clippy::derive_partial_eq_without_eq)]
3240#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3241pub struct UserActivitySettingsResponse {}
3242#[allow(clippy::derive_partial_eq_without_eq)]
3243#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3244pub struct RecordUserActivityResponse {}
3245#[allow(clippy::derive_partial_eq_without_eq)]
3246#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3247pub struct RedeemCodeResponse {}
3248#[allow(clippy::derive_partial_eq_without_eq)]
3249#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3250pub struct SelfUpdateResponse {}
3251#[allow(clippy::derive_partial_eq_without_eq)]
3252#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3253pub struct GetInitialInstrumentFlowStateResponse {}
3254#[allow(clippy::derive_partial_eq_without_eq)]
3255#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3256pub struct CreateInstrumentResponse {}
3257#[allow(clippy::derive_partial_eq_without_eq)]
3258#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3259pub struct ChallengeResponse {}
3260#[allow(clippy::derive_partial_eq_without_eq)]
3261#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3262pub struct BackDeviceChoicesResponse {}
3263#[allow(clippy::derive_partial_eq_without_eq)]
3264#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3265pub struct BackupDocumentChoicesResponse {}
3266#[allow(clippy::derive_partial_eq_without_eq)]
3267#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3268pub struct EarlyUpdateResponse {}
3269#[allow(clippy::derive_partial_eq_without_eq)]
3270#[derive(Clone, PartialEq, ::prost::Message)]
3271pub struct PreloadsResponse {
3272    #[prost(message, optional, tag = "1")]
3273    pub config_preload: ::core::option::Option<preloads_response::Preload>,
3274    #[prost(message, repeated, tag = "2")]
3275    pub app_preload: ::prost::alloc::vec::Vec<preloads_response::Preload>,
3276}
3277/// Nested message and enum types in `PreloadsResponse`.
3278pub mod preloads_response {
3279    #[allow(clippy::derive_partial_eq_without_eq)]
3280    #[derive(Clone, PartialEq, ::prost::Message)]
3281    pub struct Preload {
3282        #[prost(message, optional, tag = "1")]
3283        pub doc_id: ::core::option::Option<super::DocId>,
3284        #[prost(int32, optional, tag = "2")]
3285        pub version_code: ::core::option::Option<i32>,
3286        #[prost(string, optional, tag = "3")]
3287        pub title: ::core::option::Option<::prost::alloc::string::String>,
3288        #[prost(message, optional, tag = "4")]
3289        pub icon: ::core::option::Option<super::Image>,
3290        #[prost(string, optional, tag = "5")]
3291        pub delivery_token: ::core::option::Option<::prost::alloc::string::String>,
3292        #[prost(int32, optional, tag = "6")]
3293        pub install_location: ::core::option::Option<i32>,
3294        #[prost(int64, optional, tag = "7")]
3295        pub size: ::core::option::Option<i64>,
3296    }
3297}
3298#[allow(clippy::derive_partial_eq_without_eq)]
3299#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3300pub struct MyAccountsResponse {}
3301#[allow(clippy::derive_partial_eq_without_eq)]
3302#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3303pub struct ContentFilterResponse {}
3304#[allow(clippy::derive_partial_eq_without_eq)]
3305#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3306pub struct ExperimentsResponse {}
3307#[allow(clippy::derive_partial_eq_without_eq)]
3308#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3309pub struct SurveyResponse {}
3310#[allow(clippy::derive_partial_eq_without_eq)]
3311#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3312pub struct PingResponse {}
3313#[allow(clippy::derive_partial_eq_without_eq)]
3314#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3315pub struct UpdateUserSettingResponse {}
3316#[allow(clippy::derive_partial_eq_without_eq)]
3317#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3318pub struct GetUserSettingsResponse {}
3319#[allow(clippy::derive_partial_eq_without_eq)]
3320#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3321pub struct GetSharingSettingsResponse {}
3322#[allow(clippy::derive_partial_eq_without_eq)]
3323#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3324pub struct UpdateSharingSettingsResponse {}
3325#[allow(clippy::derive_partial_eq_without_eq)]
3326#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3327pub struct ReviewSnippetsResponse {}
3328#[allow(clippy::derive_partial_eq_without_eq)]
3329#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3330pub struct DocumentSharingStateResponse {}
3331#[allow(clippy::derive_partial_eq_without_eq)]
3332#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3333pub struct ModuleDeliveryResponse {}
3334#[allow(clippy::derive_partial_eq_without_eq)]
3335#[derive(Clone, PartialEq, ::prost::Message)]
3336pub struct PreFetch {
3337    #[prost(string, optional, tag = "1")]
3338    pub url: ::core::option::Option<::prost::alloc::string::String>,
3339    #[prost(message, optional, tag = "2")]
3340    pub response: ::core::option::Option<ResponseWrapper>,
3341    #[prost(string, optional, tag = "3")]
3342    pub etag: ::core::option::Option<::prost::alloc::string::String>,
3343    #[prost(int64, optional, tag = "4")]
3344    pub ttl: ::core::option::Option<i64>,
3345    #[prost(int64, optional, tag = "5")]
3346    pub soft_ttl: ::core::option::Option<i64>,
3347}
3348#[allow(clippy::derive_partial_eq_without_eq)]
3349#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3350pub struct ServerMetadata {
3351    #[prost(int64, optional, tag = "1")]
3352    pub latency_millis: ::core::option::Option<i64>,
3353}
3354#[allow(clippy::derive_partial_eq_without_eq)]
3355#[derive(Clone, PartialEq, ::prost::Message)]
3356pub struct Targets {
3357    #[prost(int64, repeated, packed = "false", tag = "1")]
3358    pub target_id: ::prost::alloc::vec::Vec<i64>,
3359    #[prost(bytes = "vec", optional, tag = "2")]
3360    pub signature: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3361}
3362#[allow(clippy::derive_partial_eq_without_eq)]
3363#[derive(Clone, PartialEq, ::prost::Message)]
3364pub struct ServerCookie {
3365    #[prost(int32, optional, tag = "1")]
3366    pub r#type: ::core::option::Option<i32>,
3367    #[prost(bytes = "vec", optional, tag = "2")]
3368    pub token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3369}
3370#[allow(clippy::derive_partial_eq_without_eq)]
3371#[derive(Clone, PartialEq, ::prost::Message)]
3372pub struct ServerCookies {
3373    #[prost(message, repeated, tag = "1")]
3374    pub server_cookie: ::prost::alloc::vec::Vec<ServerCookie>,
3375}
3376#[allow(clippy::derive_partial_eq_without_eq)]
3377#[derive(Clone, PartialEq, ::prost::Message)]
3378pub struct ResponseWrapper {
3379    #[prost(message, optional, tag = "1")]
3380    pub payload: ::core::option::Option<Payload>,
3381    #[prost(message, optional, tag = "2")]
3382    pub commands: ::core::option::Option<ServerCommands>,
3383    #[prost(message, repeated, tag = "3")]
3384    pub pre_fetch: ::prost::alloc::vec::Vec<PreFetch>,
3385    #[prost(message, repeated, tag = "4")]
3386    pub notification: ::prost::alloc::vec::Vec<Notification>,
3387    #[prost(message, optional, tag = "5")]
3388    pub server_metadata: ::core::option::Option<ServerMetadata>,
3389    #[prost(message, optional, tag = "6")]
3390    pub targets: ::core::option::Option<Targets>,
3391    #[prost(message, optional, tag = "7")]
3392    pub server_cookies: ::core::option::Option<ServerCookies>,
3393    #[prost(bytes = "vec", optional, tag = "9")]
3394    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3395}
3396#[allow(clippy::derive_partial_eq_without_eq)]
3397#[derive(Clone, PartialEq, ::prost::Message)]
3398pub struct ResponseWrapperApi {
3399    #[prost(message, optional, tag = "1")]
3400    pub payload: ::core::option::Option<PayloadApi>,
3401}
3402#[allow(clippy::derive_partial_eq_without_eq)]
3403#[derive(Clone, PartialEq, ::prost::Message)]
3404pub struct PayloadApi {
3405    #[prost(message, optional, tag = "5")]
3406    pub user_profile_response: ::core::option::Option<UserProfileResponse>,
3407}
3408#[allow(clippy::derive_partial_eq_without_eq)]
3409#[derive(Clone, PartialEq, ::prost::Message)]
3410pub struct UserProfileResponse {
3411    #[prost(message, optional, tag = "1")]
3412    pub user_profile: ::core::option::Option<UserProfile>,
3413}
3414#[allow(clippy::derive_partial_eq_without_eq)]
3415#[derive(Clone, PartialEq, ::prost::Message)]
3416pub struct ServerCommands {
3417    #[prost(bool, optional, tag = "1")]
3418    pub clear_cache: ::core::option::Option<bool>,
3419    #[prost(string, optional, tag = "2")]
3420    pub display_error_message: ::core::option::Option<::prost::alloc::string::String>,
3421    #[prost(string, optional, tag = "3")]
3422    pub log_error_stacktrace: ::core::option::Option<::prost::alloc::string::String>,
3423}
3424#[allow(clippy::derive_partial_eq_without_eq)]
3425#[derive(Clone, PartialEq, ::prost::Message)]
3426pub struct GetReviewsResponse {
3427    #[prost(message, repeated, tag = "1")]
3428    pub review: ::prost::alloc::vec::Vec<Review>,
3429    #[prost(int64, optional, tag = "2")]
3430    pub matching_count: ::core::option::Option<i64>,
3431}
3432#[allow(clippy::derive_partial_eq_without_eq)]
3433#[derive(Clone, PartialEq, ::prost::Message)]
3434pub struct Review {
3435    #[prost(string, optional, tag = "1")]
3436    pub author_name: ::core::option::Option<::prost::alloc::string::String>,
3437    #[prost(string, optional, tag = "2")]
3438    pub url: ::core::option::Option<::prost::alloc::string::String>,
3439    #[prost(string, optional, tag = "3")]
3440    pub source: ::core::option::Option<::prost::alloc::string::String>,
3441    #[prost(string, optional, tag = "4")]
3442    pub version: ::core::option::Option<::prost::alloc::string::String>,
3443    #[prost(int64, optional, tag = "5")]
3444    pub timestamp: ::core::option::Option<i64>,
3445    #[prost(int32, optional, tag = "6")]
3446    pub star_rating: ::core::option::Option<i32>,
3447    #[prost(string, optional, tag = "7")]
3448    pub title: ::core::option::Option<::prost::alloc::string::String>,
3449    #[prost(string, optional, tag = "8")]
3450    pub comment: ::core::option::Option<::prost::alloc::string::String>,
3451    #[prost(string, optional, tag = "9")]
3452    pub comment_id: ::core::option::Option<::prost::alloc::string::String>,
3453    #[prost(string, optional, tag = "19")]
3454    pub device_name: ::core::option::Option<::prost::alloc::string::String>,
3455    #[prost(string, optional, tag = "29")]
3456    pub reply_text: ::core::option::Option<::prost::alloc::string::String>,
3457    #[prost(int64, optional, tag = "30")]
3458    pub reply_time_stamp: ::core::option::Option<i64>,
3459    #[prost(message, optional, tag = "31")]
3460    pub author: ::core::option::Option<ReviewAuthor>,
3461    #[prost(message, optional, tag = "33")]
3462    pub user_profile: ::core::option::Option<UserProfile>,
3463    #[prost(message, optional, tag = "34")]
3464    pub sentiment: ::core::option::Option<Image>,
3465    #[prost(int32, optional, tag = "35")]
3466    pub helpful_count: ::core::option::Option<i32>,
3467    #[prost(int64, optional, tag = "38")]
3468    pub thumbs_up_count: ::core::option::Option<i64>,
3469}
3470#[allow(clippy::derive_partial_eq_without_eq)]
3471#[derive(Clone, PartialEq, ::prost::Message)]
3472pub struct CriticReviewsResponse {
3473    #[prost(string, optional, tag = "1")]
3474    pub title: ::core::option::Option<::prost::alloc::string::String>,
3475    #[prost(message, optional, tag = "2")]
3476    pub image: ::core::option::Option<Image>,
3477    #[prost(uint32, optional, tag = "3")]
3478    pub total_num_reviews: ::core::option::Option<u32>,
3479    #[prost(uint32, optional, tag = "4")]
3480    pub percent_favorable: ::core::option::Option<u32>,
3481    #[prost(string, optional, tag = "5")]
3482    pub source_text: ::core::option::Option<::prost::alloc::string::String>,
3483    #[prost(message, optional, tag = "6")]
3484    pub source: ::core::option::Option<Link>,
3485    #[prost(message, repeated, tag = "7")]
3486    pub review: ::prost::alloc::vec::Vec<Review>,
3487}
3488#[allow(clippy::derive_partial_eq_without_eq)]
3489#[derive(Clone, PartialEq, ::prost::Message)]
3490pub struct ReviewAuthor {
3491    #[prost(string, optional, tag = "2")]
3492    pub name: ::core::option::Option<::prost::alloc::string::String>,
3493    #[prost(message, optional, tag = "5")]
3494    pub avatar: ::core::option::Option<Image>,
3495}
3496#[allow(clippy::derive_partial_eq_without_eq)]
3497#[derive(Clone, PartialEq, ::prost::Message)]
3498pub struct UserProfile {
3499    #[prost(string, optional, tag = "1")]
3500    pub profile_id: ::core::option::Option<::prost::alloc::string::String>,
3501    #[prost(string, optional, tag = "2")]
3502    pub person_id: ::core::option::Option<::prost::alloc::string::String>,
3503    #[prost(int32, optional, tag = "3")]
3504    pub profile_type: ::core::option::Option<i32>,
3505    #[prost(int32, optional, tag = "4")]
3506    pub person_type: ::core::option::Option<i32>,
3507    #[prost(string, optional, tag = "5")]
3508    pub name: ::core::option::Option<::prost::alloc::string::String>,
3509    #[prost(message, repeated, tag = "10")]
3510    pub image: ::prost::alloc::vec::Vec<Image>,
3511    #[prost(string, optional, tag = "19")]
3512    pub profile_url: ::core::option::Option<::prost::alloc::string::String>,
3513    #[prost(string, optional, tag = "22")]
3514    pub profile_description: ::core::option::Option<::prost::alloc::string::String>,
3515}
3516#[allow(clippy::derive_partial_eq_without_eq)]
3517#[derive(Clone, PartialEq, ::prost::Message)]
3518pub struct ReviewResponse {
3519    #[prost(message, optional, tag = "1")]
3520    pub user_reviews_response: ::core::option::Option<GetReviewsResponse>,
3521    #[prost(string, optional, tag = "2")]
3522    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
3523    #[prost(message, optional, tag = "3")]
3524    pub user_review: ::core::option::Option<Review>,
3525    #[prost(string, optional, tag = "4")]
3526    pub suggestions_list_url: ::core::option::Option<::prost::alloc::string::String>,
3527    #[prost(message, optional, tag = "5")]
3528    pub critic_reviews_response: ::core::option::Option<CriticReviewsResponse>,
3529}
3530#[allow(clippy::derive_partial_eq_without_eq)]
3531#[derive(Clone, PartialEq, ::prost::Message)]
3532pub struct RelatedSearch {
3533    #[prost(string, optional, tag = "1")]
3534    pub search_url: ::core::option::Option<::prost::alloc::string::String>,
3535    #[prost(string, optional, tag = "2")]
3536    pub header: ::core::option::Option<::prost::alloc::string::String>,
3537    #[prost(int32, optional, tag = "3")]
3538    pub backend_id: ::core::option::Option<i32>,
3539    #[prost(int32, optional, tag = "4", default = "1")]
3540    pub doc_type: ::core::option::Option<i32>,
3541    #[prost(bool, optional, tag = "5")]
3542    pub current: ::core::option::Option<bool>,
3543}
3544#[allow(clippy::derive_partial_eq_without_eq)]
3545#[derive(Clone, PartialEq, ::prost::Message)]
3546pub struct SearchResponse {
3547    #[prost(string, optional, tag = "1")]
3548    pub original_query: ::core::option::Option<::prost::alloc::string::String>,
3549    #[prost(string, optional, tag = "2")]
3550    pub suggested_query: ::core::option::Option<::prost::alloc::string::String>,
3551    #[prost(bool, optional, tag = "3")]
3552    pub aggregate_query: ::core::option::Option<bool>,
3553    #[prost(message, repeated, tag = "4")]
3554    pub bucket: ::prost::alloc::vec::Vec<Bucket>,
3555    #[prost(message, repeated, tag = "5")]
3556    pub item: ::prost::alloc::vec::Vec<Item>,
3557    #[prost(message, repeated, tag = "6")]
3558    pub related_search: ::prost::alloc::vec::Vec<RelatedSearch>,
3559    #[prost(bytes = "vec", optional, tag = "7")]
3560    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3561    #[prost(bool, optional, tag = "8")]
3562    pub full_page_replaced: ::core::option::Option<bool>,
3563    #[prost(bool, optional, tag = "9")]
3564    pub contains_snow: ::core::option::Option<bool>,
3565    #[prost(string, optional, tag = "10")]
3566    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
3567}
3568#[allow(clippy::derive_partial_eq_without_eq)]
3569#[derive(Clone, PartialEq, ::prost::Message)]
3570pub struct SearchSuggestResponse {
3571    #[prost(message, repeated, tag = "1")]
3572    pub entry: ::prost::alloc::vec::Vec<SearchSuggestEntry>,
3573}
3574#[allow(clippy::derive_partial_eq_without_eq)]
3575#[derive(Clone, PartialEq, ::prost::Message)]
3576pub struct SearchSuggestEntry {
3577    #[prost(int32, optional, tag = "1")]
3578    pub r#type: ::core::option::Option<i32>,
3579    #[prost(string, optional, tag = "2")]
3580    pub suggested_query: ::core::option::Option<::prost::alloc::string::String>,
3581    #[prost(message, optional, tag = "5")]
3582    pub image_container: ::core::option::Option<search_suggest_entry::ImageContainer>,
3583    #[prost(string, optional, tag = "6")]
3584    pub title: ::core::option::Option<::prost::alloc::string::String>,
3585    #[prost(message, optional, tag = "8")]
3586    pub package_name_container: ::core::option::Option<
3587        search_suggest_entry::PackageNameContainer,
3588    >,
3589}
3590/// Nested message and enum types in `SearchSuggestEntry`.
3591pub mod search_suggest_entry {
3592    #[allow(clippy::derive_partial_eq_without_eq)]
3593    #[derive(Clone, PartialEq, ::prost::Message)]
3594    pub struct ImageContainer {
3595        #[prost(string, optional, tag = "5")]
3596        pub image_url: ::core::option::Option<::prost::alloc::string::String>,
3597    }
3598    #[allow(clippy::derive_partial_eq_without_eq)]
3599    #[derive(Clone, PartialEq, ::prost::Message)]
3600    pub struct PackageNameContainer {
3601        #[prost(string, optional, tag = "1")]
3602        pub package_name: ::core::option::Option<::prost::alloc::string::String>,
3603    }
3604}
3605#[allow(clippy::derive_partial_eq_without_eq)]
3606#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3607pub struct TestingProgramResponse {
3608    #[prost(message, optional, tag = "2")]
3609    pub result: ::core::option::Option<TestingProgramResult>,
3610}
3611#[allow(clippy::derive_partial_eq_without_eq)]
3612#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3613pub struct TestingProgramResult {
3614    #[prost(message, optional, tag = "4")]
3615    pub details: ::core::option::Option<TestingProgramDetails>,
3616}
3617#[allow(clippy::derive_partial_eq_without_eq)]
3618#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3619pub struct TestingProgramDetails {
3620    #[prost(bool, optional, tag = "2")]
3621    pub subscribed: ::core::option::Option<bool>,
3622    #[prost(int64, optional, tag = "3")]
3623    pub id: ::core::option::Option<i64>,
3624    #[prost(bool, optional, tag = "4")]
3625    pub unsubscribed: ::core::option::Option<bool>,
3626}
3627#[allow(clippy::derive_partial_eq_without_eq)]
3628#[derive(Clone, PartialEq, ::prost::Message)]
3629pub struct LogRequest {
3630    #[prost(int64, optional, tag = "1")]
3631    pub timestamp: ::core::option::Option<i64>,
3632    #[prost(string, optional, tag = "2")]
3633    pub download_confirmation_query: ::core::option::Option<
3634        ::prost::alloc::string::String,
3635    >,
3636}
3637#[allow(clippy::derive_partial_eq_without_eq)]
3638#[derive(Clone, PartialEq, ::prost::Message)]
3639pub struct TestingProgramRequest {
3640    #[prost(string, optional, tag = "1")]
3641    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
3642    #[prost(bool, optional, tag = "2")]
3643    pub subscribe: ::core::option::Option<bool>,
3644}
3645#[allow(clippy::derive_partial_eq_without_eq)]
3646#[derive(Clone, PartialEq, ::prost::Message)]
3647pub struct UploadDeviceConfigRequest {
3648    #[prost(message, optional, tag = "1")]
3649    pub device_configuration: ::core::option::Option<DeviceConfigurationProto>,
3650    #[prost(string, optional, tag = "2")]
3651    pub manufacturer: ::core::option::Option<::prost::alloc::string::String>,
3652    #[prost(string, optional, tag = "3")]
3653    pub gcm_registration_id: ::core::option::Option<::prost::alloc::string::String>,
3654}
3655#[allow(clippy::derive_partial_eq_without_eq)]
3656#[derive(Clone, PartialEq, ::prost::Message)]
3657pub struct UploadDeviceConfigResponse {
3658    #[prost(string, optional, tag = "1")]
3659    pub upload_device_config_token: ::core::option::Option<
3660        ::prost::alloc::string::String,
3661    >,
3662}
3663#[allow(clippy::derive_partial_eq_without_eq)]
3664#[derive(Clone, PartialEq, ::prost::Message)]
3665pub struct AndroidCheckinRequest {
3666    #[prost(string, optional, tag = "1")]
3667    pub imei: ::core::option::Option<::prost::alloc::string::String>,
3668    #[prost(int64, optional, tag = "2", default = "0")]
3669    pub id: ::core::option::Option<i64>,
3670    #[prost(string, optional, tag = "3")]
3671    pub digest: ::core::option::Option<::prost::alloc::string::String>,
3672    #[prost(message, optional, tag = "4")]
3673    pub checkin: ::core::option::Option<AndroidCheckinProto>,
3674    #[prost(string, optional, tag = "5")]
3675    pub desired_build: ::core::option::Option<::prost::alloc::string::String>,
3676    #[prost(string, optional, tag = "6")]
3677    pub locale: ::core::option::Option<::prost::alloc::string::String>,
3678    #[prost(int64, optional, tag = "7")]
3679    pub logging_id: ::core::option::Option<i64>,
3680    #[prost(string, optional, tag = "8")]
3681    pub market_checkin: ::core::option::Option<::prost::alloc::string::String>,
3682    #[prost(string, repeated, tag = "9")]
3683    pub mac_addr: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3684    #[prost(string, optional, tag = "10")]
3685    pub meid: ::core::option::Option<::prost::alloc::string::String>,
3686    #[prost(string, repeated, tag = "11")]
3687    pub account_cookie: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3688    #[prost(string, optional, tag = "12")]
3689    pub time_zone: ::core::option::Option<::prost::alloc::string::String>,
3690    #[prost(fixed64, optional, tag = "13")]
3691    pub security_token: ::core::option::Option<u64>,
3692    #[prost(int32, optional, tag = "14")]
3693    pub version: ::core::option::Option<i32>,
3694    #[prost(string, repeated, tag = "15")]
3695    pub ota_cert: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3696    #[prost(string, optional, tag = "16")]
3697    pub serial_number: ::core::option::Option<::prost::alloc::string::String>,
3698    #[prost(string, optional, tag = "17")]
3699    pub esn: ::core::option::Option<::prost::alloc::string::String>,
3700    #[prost(message, optional, tag = "18")]
3701    pub device_configuration: ::core::option::Option<DeviceConfigurationProto>,
3702    #[prost(string, repeated, tag = "19")]
3703    pub mac_addr_type: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3704    #[prost(int32, optional, tag = "20")]
3705    pub fragment: ::core::option::Option<i32>,
3706    #[prost(string, optional, tag = "21")]
3707    pub user_name: ::core::option::Option<::prost::alloc::string::String>,
3708    #[prost(int32, optional, tag = "22")]
3709    pub user_serial_number: ::core::option::Option<i32>,
3710}
3711#[allow(clippy::derive_partial_eq_without_eq)]
3712#[derive(Clone, PartialEq, ::prost::Message)]
3713pub struct AndroidCheckinResponse {
3714    #[prost(bool, optional, tag = "1")]
3715    pub stats_ok: ::core::option::Option<bool>,
3716    #[prost(message, repeated, tag = "2")]
3717    pub intent: ::prost::alloc::vec::Vec<AndroidIntentProto>,
3718    #[prost(int64, optional, tag = "3")]
3719    pub time_msec: ::core::option::Option<i64>,
3720    #[prost(string, optional, tag = "4")]
3721    pub digest: ::core::option::Option<::prost::alloc::string::String>,
3722    #[prost(message, repeated, tag = "5")]
3723    pub setting: ::prost::alloc::vec::Vec<GservicesSetting>,
3724    #[prost(bool, optional, tag = "6")]
3725    pub market_ok: ::core::option::Option<bool>,
3726    #[prost(fixed64, optional, tag = "7")]
3727    pub android_id: ::core::option::Option<u64>,
3728    #[prost(fixed64, optional, tag = "8")]
3729    pub security_token: ::core::option::Option<u64>,
3730    #[prost(bool, optional, tag = "9")]
3731    pub settings_diff: ::core::option::Option<bool>,
3732    #[prost(string, repeated, tag = "10")]
3733    pub delete_setting: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3734    #[prost(string, optional, tag = "12")]
3735    pub device_checkin_consistency_token: ::core::option::Option<
3736        ::prost::alloc::string::String,
3737    >,
3738}
3739#[allow(clippy::derive_partial_eq_without_eq)]
3740#[derive(Clone, PartialEq, ::prost::Message)]
3741pub struct GservicesSetting {
3742    #[prost(bytes = "vec", optional, tag = "1")]
3743    pub name: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3744    #[prost(bytes = "vec", optional, tag = "2")]
3745    pub value: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3746}
3747#[allow(clippy::derive_partial_eq_without_eq)]
3748#[derive(Clone, PartialEq, ::prost::Message)]
3749pub struct AndroidBuildProto {
3750    #[prost(string, optional, tag = "1")]
3751    pub id: ::core::option::Option<::prost::alloc::string::String>,
3752    #[prost(string, optional, tag = "2")]
3753    pub product: ::core::option::Option<::prost::alloc::string::String>,
3754    #[prost(string, optional, tag = "3")]
3755    pub carrier: ::core::option::Option<::prost::alloc::string::String>,
3756    #[prost(string, optional, tag = "4")]
3757    pub radio: ::core::option::Option<::prost::alloc::string::String>,
3758    #[prost(string, optional, tag = "5")]
3759    pub bootloader: ::core::option::Option<::prost::alloc::string::String>,
3760    #[prost(string, optional, tag = "6")]
3761    pub client: ::core::option::Option<::prost::alloc::string::String>,
3762    #[prost(int64, optional, tag = "7")]
3763    pub timestamp: ::core::option::Option<i64>,
3764    #[prost(int32, optional, tag = "8")]
3765    pub google_services: ::core::option::Option<i32>,
3766    #[prost(string, optional, tag = "9")]
3767    pub device: ::core::option::Option<::prost::alloc::string::String>,
3768    #[prost(int32, optional, tag = "10")]
3769    pub sdk_version: ::core::option::Option<i32>,
3770    #[prost(string, optional, tag = "11")]
3771    pub model: ::core::option::Option<::prost::alloc::string::String>,
3772    #[prost(string, optional, tag = "12")]
3773    pub manufacturer: ::core::option::Option<::prost::alloc::string::String>,
3774    #[prost(string, optional, tag = "13")]
3775    pub build_product: ::core::option::Option<::prost::alloc::string::String>,
3776    #[prost(bool, optional, tag = "14")]
3777    pub ota_installed: ::core::option::Option<bool>,
3778}
3779#[allow(clippy::derive_partial_eq_without_eq)]
3780#[derive(Clone, PartialEq, ::prost::Message)]
3781pub struct AndroidCheckinProto {
3782    #[prost(message, optional, tag = "1")]
3783    pub build: ::core::option::Option<AndroidBuildProto>,
3784    #[prost(int64, optional, tag = "2")]
3785    pub last_checkin_msec: ::core::option::Option<i64>,
3786    #[prost(message, repeated, tag = "3")]
3787    pub event: ::prost::alloc::vec::Vec<AndroidEventProto>,
3788    #[prost(message, repeated, tag = "4")]
3789    pub stat: ::prost::alloc::vec::Vec<AndroidStatisticProto>,
3790    #[prost(string, repeated, tag = "5")]
3791    pub requested_group: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3792    #[prost(string, optional, tag = "6")]
3793    pub cell_operator: ::core::option::Option<::prost::alloc::string::String>,
3794    #[prost(string, optional, tag = "7")]
3795    pub sim_operator: ::core::option::Option<::prost::alloc::string::String>,
3796    #[prost(string, optional, tag = "8")]
3797    pub roaming: ::core::option::Option<::prost::alloc::string::String>,
3798    #[prost(int32, optional, tag = "9")]
3799    pub user_number: ::core::option::Option<i32>,
3800}
3801#[allow(clippy::derive_partial_eq_without_eq)]
3802#[derive(Clone, PartialEq, ::prost::Message)]
3803pub struct AndroidEventProto {
3804    #[prost(string, optional, tag = "1")]
3805    pub tag: ::core::option::Option<::prost::alloc::string::String>,
3806    #[prost(string, optional, tag = "2")]
3807    pub value: ::core::option::Option<::prost::alloc::string::String>,
3808    #[prost(int64, optional, tag = "3")]
3809    pub time_msec: ::core::option::Option<i64>,
3810}
3811#[allow(clippy::derive_partial_eq_without_eq)]
3812#[derive(Clone, PartialEq, ::prost::Message)]
3813pub struct AndroidIntentProto {
3814    #[prost(string, optional, tag = "1")]
3815    pub action: ::core::option::Option<::prost::alloc::string::String>,
3816    #[prost(string, optional, tag = "2")]
3817    pub data_uri: ::core::option::Option<::prost::alloc::string::String>,
3818    #[prost(string, optional, tag = "3")]
3819    pub mime_type: ::core::option::Option<::prost::alloc::string::String>,
3820    #[prost(string, optional, tag = "4")]
3821    pub java_class: ::core::option::Option<::prost::alloc::string::String>,
3822    #[prost(group, repeated, tag = "5")]
3823    pub extra: ::prost::alloc::vec::Vec<android_intent_proto::Extra>,
3824}
3825/// Nested message and enum types in `AndroidIntentProto`.
3826pub mod android_intent_proto {
3827    #[allow(clippy::derive_partial_eq_without_eq)]
3828    #[derive(Clone, PartialEq, ::prost::Message)]
3829    pub struct Extra {
3830        #[prost(string, optional, tag = "6")]
3831        pub name: ::core::option::Option<::prost::alloc::string::String>,
3832        #[prost(string, optional, tag = "7")]
3833        pub value: ::core::option::Option<::prost::alloc::string::String>,
3834    }
3835}
3836#[allow(clippy::derive_partial_eq_without_eq)]
3837#[derive(Clone, PartialEq, ::prost::Message)]
3838pub struct AndroidStatisticProto {
3839    #[prost(string, optional, tag = "1")]
3840    pub tag: ::core::option::Option<::prost::alloc::string::String>,
3841    #[prost(int32, optional, tag = "2")]
3842    pub count: ::core::option::Option<i32>,
3843    #[prost(float, optional, tag = "3")]
3844    pub sum: ::core::option::Option<f32>,
3845}
3846#[allow(clippy::derive_partial_eq_without_eq)]
3847#[derive(Clone, PartialEq, ::prost::Message)]
3848pub struct ClientLibraryState {
3849    #[prost(int32, optional, tag = "1")]
3850    pub corpus: ::core::option::Option<i32>,
3851    #[prost(bytes = "vec", optional, tag = "2")]
3852    pub server_token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
3853    #[prost(int64, optional, tag = "3")]
3854    pub hash_code_sum: ::core::option::Option<i64>,
3855    #[prost(int32, optional, tag = "4")]
3856    pub library_size: ::core::option::Option<i32>,
3857    #[prost(string, optional, tag = "5")]
3858    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
3859}
3860#[allow(clippy::derive_partial_eq_without_eq)]
3861#[derive(Clone, PartialEq, ::prost::Message)]
3862pub struct AndroidDataUsageProto {
3863    #[prost(int32, optional, tag = "1")]
3864    pub version: ::core::option::Option<i32>,
3865    #[prost(int64, optional, tag = "2")]
3866    pub current_report_msec: ::core::option::Option<i64>,
3867    #[prost(message, repeated, tag = "3")]
3868    pub key_to_package_name_mapping: ::prost::alloc::vec::Vec<KeyToPackageNameMapping>,
3869    #[prost(message, repeated, tag = "4")]
3870    pub payload_level_app_stat: ::prost::alloc::vec::Vec<PayloadLevelAppStat>,
3871    #[prost(message, repeated, tag = "5")]
3872    pub ip_layer_network_stat: ::prost::alloc::vec::Vec<IpLayerNetworkStat>,
3873}
3874#[allow(clippy::derive_partial_eq_without_eq)]
3875#[derive(Clone, PartialEq, ::prost::Message)]
3876pub struct AndroidUsageStatsReport {
3877    #[prost(int64, optional, tag = "1")]
3878    pub android_id: ::core::option::Option<i64>,
3879    #[prost(int64, optional, tag = "2")]
3880    pub logging_id: ::core::option::Option<i64>,
3881    #[prost(message, optional, tag = "3")]
3882    pub usage_stats: ::core::option::Option<UsageStatsExtensionProto>,
3883}
3884#[allow(clippy::derive_partial_eq_without_eq)]
3885#[derive(Clone, PartialEq, ::prost::Message)]
3886pub struct AppBucket {
3887    #[prost(int64, optional, tag = "1")]
3888    pub bucket_start_msec: ::core::option::Option<i64>,
3889    #[prost(int64, optional, tag = "2")]
3890    pub bucket_duration_msec: ::core::option::Option<i64>,
3891    #[prost(message, repeated, tag = "3")]
3892    pub stat_counters: ::prost::alloc::vec::Vec<StatCounters>,
3893    #[prost(int64, optional, tag = "4")]
3894    pub operation_count: ::core::option::Option<i64>,
3895}
3896#[allow(clippy::derive_partial_eq_without_eq)]
3897#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3898pub struct CounterData {
3899    #[prost(int64, optional, tag = "1")]
3900    pub bytes: ::core::option::Option<i64>,
3901    #[prost(int64, optional, tag = "2")]
3902    pub packets: ::core::option::Option<i64>,
3903}
3904#[allow(clippy::derive_partial_eq_without_eq)]
3905#[derive(Clone, PartialEq, ::prost::Message)]
3906pub struct IpLayerAppStat {
3907    #[prost(int32, optional, tag = "1")]
3908    pub package_key: ::core::option::Option<i32>,
3909    #[prost(int32, optional, tag = "2")]
3910    pub application_tag: ::core::option::Option<i32>,
3911    #[prost(message, repeated, tag = "3")]
3912    pub ip_layer_app_bucket: ::prost::alloc::vec::Vec<AppBucket>,
3913}
3914#[allow(clippy::derive_partial_eq_without_eq)]
3915#[derive(Clone, PartialEq, ::prost::Message)]
3916pub struct IpLayerNetworkBucket {
3917    #[prost(int64, optional, tag = "1")]
3918    pub bucket_start_msec: ::core::option::Option<i64>,
3919    #[prost(int64, optional, tag = "2")]
3920    pub bucket_duration_msec: ::core::option::Option<i64>,
3921    #[prost(message, repeated, tag = "3")]
3922    pub stat_counters: ::prost::alloc::vec::Vec<StatCounters>,
3923    #[prost(int64, optional, tag = "4")]
3924    pub network_active_duration: ::core::option::Option<i64>,
3925}
3926#[allow(clippy::derive_partial_eq_without_eq)]
3927#[derive(Clone, PartialEq, ::prost::Message)]
3928pub struct IpLayerNetworkStat {
3929    #[prost(string, optional, tag = "1")]
3930    pub network_details: ::core::option::Option<::prost::alloc::string::String>,
3931    #[prost(int32, optional, tag = "2")]
3932    pub r#type: ::core::option::Option<i32>,
3933    #[prost(message, repeated, tag = "3")]
3934    pub ip_layer_network_bucket: ::prost::alloc::vec::Vec<IpLayerNetworkBucket>,
3935    #[prost(message, repeated, tag = "4")]
3936    pub ip_layer_app_stat: ::prost::alloc::vec::Vec<IpLayerAppStat>,
3937}
3938#[allow(clippy::derive_partial_eq_without_eq)]
3939#[derive(Clone, PartialEq, ::prost::Message)]
3940pub struct KeyToPackageNameMapping {
3941    #[prost(int32, optional, tag = "1")]
3942    pub package_key: ::core::option::Option<i32>,
3943    #[prost(string, optional, tag = "2")]
3944    pub uid_name: ::core::option::Option<::prost::alloc::string::String>,
3945    #[prost(message, repeated, tag = "3")]
3946    pub shared_package: ::prost::alloc::vec::Vec<PackageInfo>,
3947}
3948#[allow(clippy::derive_partial_eq_without_eq)]
3949#[derive(Clone, PartialEq, ::prost::Message)]
3950pub struct PackageInfo {
3951    #[prost(string, optional, tag = "1")]
3952    pub pkg_name: ::core::option::Option<::prost::alloc::string::String>,
3953    #[prost(int32, optional, tag = "2")]
3954    pub version_code: ::core::option::Option<i32>,
3955}
3956#[allow(clippy::derive_partial_eq_without_eq)]
3957#[derive(Clone, PartialEq, ::prost::Message)]
3958pub struct PayloadLevelAppStat {
3959    #[prost(int32, optional, tag = "1")]
3960    pub package_key: ::core::option::Option<i32>,
3961    #[prost(int32, optional, tag = "2")]
3962    pub application_tag: ::core::option::Option<i32>,
3963    #[prost(message, repeated, tag = "3")]
3964    pub payload_level_app_bucket: ::prost::alloc::vec::Vec<AppBucket>,
3965}
3966#[allow(clippy::derive_partial_eq_without_eq)]
3967#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3968pub struct StatCounters {
3969    #[prost(int32, optional, tag = "1")]
3970    pub network_proto: ::core::option::Option<i32>,
3971    #[prost(int32, optional, tag = "2")]
3972    pub direction: ::core::option::Option<i32>,
3973    #[prost(message, optional, tag = "3")]
3974    pub counter_data: ::core::option::Option<CounterData>,
3975    #[prost(int32, optional, tag = "4")]
3976    pub fg_bg: ::core::option::Option<i32>,
3977}
3978#[allow(clippy::derive_partial_eq_without_eq)]
3979#[derive(Clone, PartialEq, ::prost::Message)]
3980pub struct UsageStatsExtensionProto {
3981    #[prost(message, optional, tag = "1")]
3982    pub data_usage: ::core::option::Option<AndroidDataUsageProto>,
3983}
3984#[allow(clippy::derive_partial_eq_without_eq)]
3985#[derive(Clone, PartialEq, ::prost::Message)]
3986pub struct ModifyLibraryRequest {
3987    #[prost(string, optional, tag = "1")]
3988    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
3989    #[prost(string, repeated, tag = "2")]
3990    pub add_package_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3991    #[prost(string, repeated, tag = "3")]
3992    pub remove_package_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3993}