#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AndroidAppDeliveryData {
    #[prost(int64, optional, tag = "1")]
    pub download_size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub sha1: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "4")]
    pub additional_file: ::prost::alloc::vec::Vec<AppFileMetadata>,
    #[prost(message, repeated, tag = "5")]
    pub download_auth_cookie: ::prost::alloc::vec::Vec<HttpCookie>,
    #[prost(bool, optional, tag = "6")]
    pub forward_locked: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "7")]
    pub refund_timeout: ::core::option::Option<i64>,
    #[prost(bool, optional, tag = "8", default = "true")]
    pub server_initiated: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "9")]
    pub post_install_refund_window_millis: ::core::option::Option<i64>,
    #[prost(bool, optional, tag = "10")]
    pub immediate_start_needed: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "11")]
    pub patch_data: ::core::option::Option<AndroidAppPatchData>,
    #[prost(message, optional, tag = "12")]
    pub encryption_params: ::core::option::Option<EncryptionParams>,
    #[prost(string, optional, tag = "13")]
    pub compressed_download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "14")]
    pub compressed_size: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "15")]
    pub split_delivery_data: ::prost::alloc::vec::Vec<SplitDeliveryData>,
    #[prost(int32, optional, tag = "16")]
    pub install_location: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "17")]
    pub r#type: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "18")]
    pub compressed_app_data: ::core::option::Option<CompressedAppData>,
    #[prost(string, optional, tag = "19")]
    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "21")]
    pub dex_metadata: ::core::option::Option<DexMetadata>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SplitDeliveryData {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "2")]
    pub download_size: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "3")]
    pub compressed_size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "4")]
    pub sha1: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub compressed_download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "7")]
    pub patch_data: ::core::option::Option<AndroidAppPatchData>,
    #[prost(message, optional, tag = "8")]
    pub compressed_app_data: ::core::option::Option<CompressedAppData>,
    #[prost(string, optional, tag = "9")]
    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AndroidAppPatchData {
    #[prost(int32, optional, tag = "1")]
    pub base_version_code: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub base_sha1: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "4", default = "1")]
    pub patch_format: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "5")]
    pub max_patch_size: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CompressedAppData {
    #[prost(int64, optional, tag = "1")]
    pub r#type: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "3")]
    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DexMetadata {
    #[prost(int64, optional, tag = "1")]
    pub download_size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AppFileMetadata {
    #[prost(int32, optional, tag = "1")]
    pub file_type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub version_code: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "3")]
    pub size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "4")]
    pub download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub patch_data: ::core::option::Option<AndroidAppPatchData>,
    #[prost(int64, optional, tag = "6")]
    pub compressed_size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "7")]
    pub compressed_download_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "8")]
    pub sha1: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EncryptionParams {
    #[prost(int32, optional, tag = "1")]
    pub version: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub encryption_key: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub h_mac_key: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct HttpCookie {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub value: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Address {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub address_line1: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub address_line2: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub city: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub state: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub postal_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub postal_country: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "8")]
    pub dependent_locality: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "9")]
    pub sorting_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "10")]
    pub language_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "11")]
    pub phone_number: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "12")]
    pub deprecated_is_reduced: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "13")]
    pub first_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "14")]
    pub last_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "15")]
    pub email: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct BrowseLink {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub data_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "4")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, optional, tag = "5")]
    pub icon: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct BrowseResponse {
    #[prost(string, optional, tag = "1")]
    pub contents_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub promo_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "3")]
    pub category: ::prost::alloc::vec::Vec<BrowseLink>,
    #[prost(message, repeated, tag = "4")]
    pub breadcrumb: ::prost::alloc::vec::Vec<BrowseLink>,
    #[prost(message, repeated, tag = "5")]
    pub quick_link: ::prost::alloc::vec::Vec<QuickLink>,
    #[prost(bytes = "vec", optional, tag = "6")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "7")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "8")]
    pub backend_id: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "9")]
    pub browse_tab: ::core::option::Option<BrowseTab>,
    #[prost(int32, optional, tag = "10")]
    pub landing_tab_index: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "11")]
    pub quick_link_tab_index: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "12")]
    pub quick_link_fallback_tab_index: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "14")]
    pub is_family_safe: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "18")]
    pub share_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DirectPurchase {
    #[prost(string, optional, tag = "1")]
    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub purchase_item_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub parent_item_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "4", default = "1")]
    pub offer_type: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RedeemGiftCard {
    #[prost(string, optional, tag = "1")]
    pub prefill_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub partner_payload: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ResolvedLink {
    #[prost(string, optional, tag = "1")]
    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub search_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub direct_purchase: ::core::option::Option<DirectPurchase>,
    #[prost(string, optional, tag = "5")]
    pub home_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "6")]
    pub redeem_gift_card: ::core::option::Option<RedeemGiftCard>,
    #[prost(bytes = "vec", optional, tag = "7")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, optional, tag = "8")]
    pub doc_id: ::core::option::Option<DocId>,
    #[prost(string, optional, tag = "9")]
    pub wishlist_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "10")]
    pub backend: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "11")]
    pub query: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub my_account_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "13")]
    pub help_center: ::core::option::Option<HelpCenter>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct HelpCenter {
    #[prost(string, optional, tag = "1")]
    pub context_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct QuickLink {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub image: ::core::option::Option<Image>,
    #[prost(message, optional, tag = "3")]
    pub link: ::core::option::Option<ResolvedLink>,
    #[prost(bool, optional, tag = "4")]
    pub display_required: ::core::option::Option<bool>,
    #[prost(bytes = "vec", optional, tag = "5")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(int32, optional, tag = "6")]
    pub backend_id: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "7")]
    pub prism_style: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct BrowseTab {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "3")]
    pub list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "4")]
    pub browse_link: ::prost::alloc::vec::Vec<BrowseLink>,
    #[prost(message, repeated, tag = "5")]
    pub quick_link: ::prost::alloc::vec::Vec<QuickLink>,
    #[prost(string, optional, tag = "6")]
    pub quick_link_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub categories_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "8")]
    pub backend_id: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "9")]
    pub highlights_banner_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BuyResponse {
    #[prost(message, optional, tag = "1")]
    pub purchase_response: ::core::option::Option<PurchaseNotificationResponse>,
    #[prost(group, optional, tag = "2")]
    pub checkoutinfo: ::core::option::Option<buy_response::CheckoutInfo>,
    #[prost(string, optional, tag = "8")]
    pub continue_via_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "9")]
    pub purchase_status_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub checkout_service_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "13")]
    pub checkout_token_required: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "14")]
    pub base_checkout_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "37")]
    pub tos_checkbox_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "38")]
    pub iab_permission_error: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "39")]
    pub purchase_status_response: ::core::option::Option<PurchaseStatusResponse>,
    #[prost(string, optional, tag = "46")]
    pub purchase_cookie: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "49")]
    pub challenge: ::core::option::Option<Challenge>,
    #[prost(string, optional, tag = "50")]
    pub add_instrument_prompt_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "51")]
    pub confirm_button_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "52")]
    pub permission_error_title_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "53")]
    pub permission_error_message_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "54")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "55")]
    pub encoded_delivery_token: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "56")]
    pub unknown_token: ::core::option::Option<::prost::alloc::string::String>,
}
/// Nested message and enum types in `BuyResponse`.
pub mod buy_response {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct CheckoutInfo {
        #[prost(message, optional, tag = "3")]
        pub item: ::core::option::Option<super::LineItem>,
        #[prost(message, repeated, tag = "4")]
        pub sub_item: ::prost::alloc::vec::Vec<super::LineItem>,
        #[prost(group, repeated, tag = "5")]
        pub checkoutoption: ::prost::alloc::vec::Vec<checkout_info::CheckoutOption>,
        #[prost(string, optional, tag = "10")]
        pub deprecated_checkout_url: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "11")]
        pub add_instrument_url: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, repeated, tag = "20")]
        pub footer_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
        #[prost(int32, repeated, packed = "false", tag = "31")]
        pub eligible_instrument_family: ::prost::alloc::vec::Vec<i32>,
        #[prost(string, repeated, tag = "36")]
        pub footnote_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
        #[prost(message, repeated, tag = "44")]
        pub eligible_instrument: ::prost::alloc::vec::Vec<super::Instrument>,
    }
    /// Nested message and enum types in `CheckoutInfo`.
    pub mod checkout_info {
        #[derive(Clone, PartialEq, ::prost::Message)]
        pub struct CheckoutOption {
            #[prost(string, optional, tag = "6")]
            pub form_of_payment: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "7")]
            pub encoded_adjusted_cart: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "15")]
            pub instrument_id: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(message, repeated, tag = "16")]
            pub item: ::prost::alloc::vec::Vec<super::super::LineItem>,
            #[prost(message, repeated, tag = "17")]
            pub sub_item: ::prost::alloc::vec::Vec<super::super::LineItem>,
            #[prost(message, optional, tag = "18")]
            pub total: ::core::option::Option<super::super::LineItem>,
            #[prost(string, repeated, tag = "19")]
            pub footer_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
            #[prost(int32, optional, tag = "29")]
            pub instrument_family: ::core::option::Option<i32>,
            #[prost(int32, repeated, packed = "false", tag = "30")]
            pub deprecated_instrument_inapplicable_reason: ::prost::alloc::vec::Vec<i32>,
            #[prost(bool, optional, tag = "32")]
            pub selected_instrument: ::core::option::Option<bool>,
            #[prost(message, optional, tag = "33")]
            pub summary: ::core::option::Option<super::super::LineItem>,
            #[prost(string, repeated, tag = "35")]
            pub footnote_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
            #[prost(message, optional, tag = "43")]
            pub instrument: ::core::option::Option<super::super::Instrument>,
            #[prost(string, optional, tag = "45")]
            pub purchase_cookie: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, repeated, tag = "48")]
            pub disabled_reason: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LineItem {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub offer: ::core::option::Option<Offer>,
    #[prost(message, optional, tag = "4")]
    pub amount: ::core::option::Option<Money>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Money {
    #[prost(int64, optional, tag = "1")]
    pub micros: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub formatted_amount: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PurchaseNotificationResponse {
    #[prost(int32, optional, tag = "1")]
    pub status: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub debug_info: ::core::option::Option<DebugInfo>,
    #[prost(string, optional, tag = "3")]
    pub localized_error_message: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub purchase_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PurchaseStatusResponse {
    #[prost(int32, optional, tag = "1")]
    pub status: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub status_msg: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub status_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub brief_message: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub info_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "6")]
    pub library_update: ::core::option::Option<LibraryUpdate>,
    #[prost(message, optional, tag = "7")]
    pub rejected_instrument: ::core::option::Option<Instrument>,
    #[prost(message, optional, tag = "8")]
    pub app_delivery_data: ::core::option::Option<AndroidAppDeliveryData>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PurchaseHistoryDetails {
    #[prost(int64, optional, tag = "2")]
    pub purchase_timestamp_millis: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "3")]
    pub purchase_details_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub offer: ::core::option::Option<Offer>,
    #[prost(string, optional, tag = "6")]
    pub purchase_status: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub title_byline_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "8")]
    pub client_refund_context: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, optional, tag = "9")]
    pub purchase_details_image: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct BillingProfileResponse {
    #[prost(int32, optional, tag = "1")]
    pub result: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub billing_profile: ::core::option::Option<BillingProfile>,
    #[prost(string, optional, tag = "3")]
    pub user_message_html: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct CheckInstrumentResponse {
    #[prost(bool, optional, tag = "1")]
    pub user_has_valid_instrument: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "2")]
    pub checkout_token_required: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "4")]
    pub instrument: ::prost::alloc::vec::Vec<Instrument>,
    #[prost(message, repeated, tag = "5")]
    pub eligible_instrument: ::prost::alloc::vec::Vec<Instrument>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct InstrumentSetupInfoResponse {
    #[prost(message, repeated, tag = "1")]
    pub setup_info: ::prost::alloc::vec::Vec<InstrumentSetupInfo>,
    #[prost(bool, optional, tag = "2")]
    pub checkout_token_required: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RedeemGiftCardRequest {
    #[prost(string, optional, tag = "1")]
    pub gift_card_pin: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub address: ::core::option::Option<Address>,
    #[prost(string, repeated, tag = "3")]
    pub accepted_legal_document_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub checkout_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct RedeemGiftCardResponse {
    #[prost(int32, optional, tag = "1")]
    pub result: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub user_message_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub balance_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub address_challenge: ::core::option::Option<AddressChallenge>,
    #[prost(bool, optional, tag = "5")]
    pub checkout_token_required: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct UpdateInstrumentRequest {
    #[prost(message, optional, tag = "1")]
    pub instrument: ::core::option::Option<Instrument>,
    #[prost(string, optional, tag = "2")]
    pub checkout_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct UpdateInstrumentResponse {
    #[prost(int32, optional, tag = "1")]
    pub result: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub instrument_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub user_message_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "4")]
    pub error_input_field: ::prost::alloc::vec::Vec<InputValidationError>,
    #[prost(bool, optional, tag = "5")]
    pub checkout_token_required: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "6")]
    pub redeemed_offer: ::core::option::Option<RedeemedPromoOffer>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct InitiateAssociationResponse {
    #[prost(string, optional, tag = "1")]
    pub user_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct VerifyAssociationResponse {
    #[prost(int32, optional, tag = "1")]
    pub status: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub billing_address: ::core::option::Option<Address>,
    #[prost(message, optional, tag = "3")]
    pub carrier_tos: ::core::option::Option<CarrierTos>,
    #[prost(string, optional, tag = "4")]
    pub carrier_error_message: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AddressChallenge {
    #[prost(string, optional, tag = "1")]
    pub response_address_param: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub response_checkboxes_param: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "5")]
    pub checkbox: ::prost::alloc::vec::Vec<FormCheckbox>,
    #[prost(message, optional, tag = "6")]
    pub address: ::core::option::Option<Address>,
    #[prost(message, repeated, tag = "7")]
    pub error_input_field: ::prost::alloc::vec::Vec<InputValidationError>,
    #[prost(string, optional, tag = "8")]
    pub error_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, repeated, packed = "false", tag = "9")]
    pub required_field: ::prost::alloc::vec::Vec<i32>,
    #[prost(message, repeated, tag = "10")]
    pub supported_country: ::prost::alloc::vec::Vec<Country>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AuthenticationChallenge {
    #[prost(int32, optional, tag = "1")]
    pub authentication_type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub response_authentication_type_param: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub response_retry_count_param: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub pin_header_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub pin_description_text_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub gaia_header_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub gaia_description_text_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "8")]
    pub gaia_footer_text_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "9")]
    pub gaia_opt_out_checkbox: ::core::option::Option<FormCheckbox>,
    #[prost(string, optional, tag = "10")]
    pub gaia_opt_out_description_text_html: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Challenge {
    #[prost(message, optional, tag = "1")]
    pub address_challenge: ::core::option::Option<AddressChallenge>,
    #[prost(message, optional, tag = "2")]
    pub authentication_challenge: ::core::option::Option<AuthenticationChallenge>,
    #[prost(message, optional, tag = "3")]
    pub web_view_challenge: ::core::option::Option<WebViewChallenge>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Country {
    #[prost(string, optional, tag = "1")]
    pub region_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct FormCheckbox {
    #[prost(string, optional, tag = "1")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "2")]
    pub checked: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "3")]
    pub required: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "4")]
    pub id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct InputValidationError {
    #[prost(int32, optional, tag = "1")]
    pub input_field: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub error_message: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct WebViewChallenge {
    #[prost(string, optional, tag = "1")]
    pub start_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub target_url_regexp: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub cancel_button_display_label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub response_target_url_param: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub cancel_url_regexp: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AddCreditCardPromoOffer {
    #[prost(string, optional, tag = "1")]
    pub header_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub image: ::core::option::Option<Image>,
    #[prost(string, optional, tag = "4")]
    pub introductory_text_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub offer_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub no_action_description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub terms_and_conditions_html: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AvailablePromoOffer {
    #[prost(message, optional, tag = "1")]
    pub add_credit_card_offer: ::core::option::Option<AddCreditCardPromoOffer>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct CheckPromoOfferResponse {
    #[prost(message, repeated, tag = "1")]
    pub available_offer: ::prost::alloc::vec::Vec<AvailablePromoOffer>,
    #[prost(message, optional, tag = "2")]
    pub redeemed_offer: ::core::option::Option<RedeemedPromoOffer>,
    #[prost(bool, optional, tag = "3")]
    pub checkout_token_required: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct RedeemedPromoOffer {
    #[prost(string, optional, tag = "1")]
    pub header_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub image: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DocId {
    #[prost(string, optional, tag = "1")]
    pub backend_doc_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2", default = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "3")]
    pub backend: ::core::option::Option<i32>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Install {
    #[prost(fixed64, optional, tag = "1")]
    pub android_id: ::core::option::Option<u64>,
    #[prost(int32, optional, tag = "2")]
    pub version: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "3")]
    pub bundled: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "4")]
    pub pending: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "5")]
    pub last_updated: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupLicenseKey {
    #[prost(fixed64, optional, tag = "1")]
    pub dasher_customer_id: ::core::option::Option<u64>,
    #[prost(message, optional, tag = "2")]
    pub doc_id: ::core::option::Option<DocId>,
    #[prost(int32, optional, tag = "3", default = "1")]
    pub licensed_offer_type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "4")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "5")]
    pub rental_period_days: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LicenseTerms {
    #[prost(message, optional, tag = "1")]
    pub group_license_key: ::core::option::Option<GroupLicenseKey>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Offer {
    #[prost(int64, optional, tag = "1")]
    pub micros: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub formatted_amount: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "4")]
    pub converted_price: ::prost::alloc::vec::Vec<Self>,
    #[prost(bool, optional, tag = "5")]
    pub checkout_flow_required: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "6")]
    pub full_price_micros: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "7")]
    pub formatted_full_amount: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "8", default = "1")]
    pub offer_type: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "9")]
    pub rental_terms: ::core::option::Option<RentalTerms>,
    #[prost(int64, optional, tag = "10")]
    pub on_sale_date: ::core::option::Option<i64>,
    #[prost(string, repeated, tag = "11")]
    pub promotion_label: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "12")]
    pub subscription_terms: ::core::option::Option<SubscriptionTerms>,
    #[prost(string, optional, tag = "13")]
    pub formatted_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "14")]
    pub formatted_description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "15")]
    pub preorder: ::core::option::Option<bool>,
    #[prost(int32, optional, tag = "16")]
    pub on_sale_date_display_time_zone_offset_millis: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "17")]
    pub licensed_offer_type: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "18")]
    pub subscription_content_terms: ::core::option::Option<SubscriptionContentTerms>,
    #[prost(string, optional, tag = "19")]
    pub offer_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "20")]
    pub preorder_fulfillment_display_date: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "21")]
    pub license_terms: ::core::option::Option<LicenseTerms>,
    #[prost(bool, optional, tag = "22")]
    pub sale: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "23")]
    pub voucher_terms: ::core::option::Option<VoucherTerms>,
    #[prost(message, repeated, tag = "24")]
    pub offer_payment: ::prost::alloc::vec::Vec<OfferPayment>,
    #[prost(bool, optional, tag = "25")]
    pub repeat_last_payment: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "26")]
    pub buy_button_label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "27")]
    pub instant_purchase_enabled: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "30")]
    pub sale_end_timestamp: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "31")]
    pub sale_message: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MonthAndDay {
    #[prost(uint32, optional, tag = "1")]
    pub month: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "2")]
    pub day: ::core::option::Option<u32>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OfferPaymentPeriod {
    #[prost(message, optional, tag = "1")]
    pub duration: ::core::option::Option<TimePeriod>,
    #[prost(message, optional, tag = "2")]
    pub start: ::core::option::Option<MonthAndDay>,
    #[prost(message, optional, tag = "3")]
    pub end: ::core::option::Option<MonthAndDay>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OfferPaymentOverride {
    #[prost(int64, optional, tag = "1")]
    pub micros: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "2")]
    pub start: ::core::option::Option<MonthAndDay>,
    #[prost(message, optional, tag = "3")]
    pub end: ::core::option::Option<MonthAndDay>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct OfferPayment {
    #[prost(int64, optional, tag = "1")]
    pub micros: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub offer_payment_period: ::core::option::Option<OfferPaymentPeriod>,
    #[prost(message, repeated, tag = "4")]
    pub offer_payment_override: ::prost::alloc::vec::Vec<OfferPaymentOverride>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct VoucherTerms {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RentalTerms {
    #[prost(int32, optional, tag = "1")]
    pub d_eprecated_grant_period_seconds: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub d_eprecated_activate_period_seconds: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "3")]
    pub grant_period: ::core::option::Option<TimePeriod>,
    #[prost(message, optional, tag = "4")]
    pub activate_period: ::core::option::Option<TimePeriod>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SignedData {
    #[prost(string, optional, tag = "1")]
    pub signed_data: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub signature: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SubscriptionContentTerms {
    #[prost(message, optional, tag = "1")]
    pub required_subscription: ::core::option::Option<DocId>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupLicenseInfo {
    #[prost(int32, optional, tag = "1")]
    pub licensed_offer_type: ::core::option::Option<i32>,
    #[prost(fixed64, optional, tag = "2")]
    pub gaia_group_id: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LicensedDocumentInfo {
    #[prost(fixed64, repeated, packed = "false", tag = "1")]
    pub gaia_group_id: ::prost::alloc::vec::Vec<u64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OwnershipInfo {
    #[prost(int64, optional, tag = "1")]
    pub initiation_timestamp: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub valid_until_timestamp: ::core::option::Option<i64>,
    #[prost(bool, optional, tag = "3")]
    pub auto_renewing: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "4")]
    pub refund_timeout_timestamp: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "5")]
    pub post_delivery_refund_window_millis: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "6")]
    pub developer_purchase_info: ::core::option::Option<SignedData>,
    #[prost(bool, optional, tag = "7")]
    pub pre_ordered: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "8")]
    pub hidden: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "9")]
    pub rental_terms: ::core::option::Option<RentalTerms>,
    #[prost(message, optional, tag = "10")]
    pub group_license_info: ::core::option::Option<GroupLicenseInfo>,
    #[prost(message, optional, tag = "11")]
    pub licensed_document_info: ::core::option::Option<LicensedDocumentInfo>,
    #[prost(int32, optional, tag = "12")]
    pub quantity: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "14")]
    pub library_expiration_timestamp: ::core::option::Option<i64>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SubscriptionTerms {
    #[prost(message, optional, tag = "1")]
    pub recurring_period: ::core::option::Option<TimePeriod>,
    #[prost(message, optional, tag = "2")]
    pub trial_period: ::core::option::Option<TimePeriod>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TimePeriod {
    #[prost(int32, optional, tag = "1")]
    pub unit: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub count: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BillingAddressSpec {
    #[prost(int32, optional, tag = "1")]
    pub billing_address_type: ::core::option::Option<i32>,
    #[prost(int32, repeated, packed = "false", tag = "2")]
    pub required_field: ::prost::alloc::vec::Vec<i32>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct BillingProfile {
    #[prost(message, repeated, tag = "1")]
    pub instrument: ::prost::alloc::vec::Vec<Instrument>,
    #[prost(string, optional, tag = "2")]
    pub selected_external_instrument_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "3")]
    pub billing_profile_option: ::prost::alloc::vec::Vec<BillingProfileOption>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BillingProfileOption {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub display_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub external_instrument_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub topup_info: ::core::option::Option<TopupInfo>,
    #[prost(message, optional, tag = "5")]
    pub carrier_billing_instrument_status: ::core::option::Option<CarrierBillingInstrumentStatus>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CarrierBillingCredentials {
    #[prost(string, optional, tag = "1")]
    pub value: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "2")]
    pub expiration: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CarrierBillingInstrument {
    #[prost(string, optional, tag = "1")]
    pub instrument_key: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub account_type: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub currency_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "4")]
    pub transaction_limit: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "5")]
    pub subscriber_identifier: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "6")]
    pub encrypted_subscriber_info: ::core::option::Option<EncryptedSubscriberInfo>,
    #[prost(message, optional, tag = "7")]
    pub credentials: ::core::option::Option<CarrierBillingCredentials>,
    #[prost(message, optional, tag = "8")]
    pub accepted_carrier_tos: ::core::option::Option<CarrierTos>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CarrierBillingInstrumentStatus {
    #[prost(message, optional, tag = "1")]
    pub carrier_tos: ::core::option::Option<CarrierTos>,
    #[prost(bool, optional, tag = "2")]
    pub association_required: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "3")]
    pub password_required: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "4")]
    pub carrier_password_prompt: ::core::option::Option<PasswordPrompt>,
    #[prost(int32, optional, tag = "5")]
    pub api_version: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "6")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "7")]
    pub device_association: ::core::option::Option<DeviceAssociation>,
    #[prost(string, optional, tag = "8")]
    pub carrier_support_phone_number: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CarrierTos {
    #[prost(message, optional, tag = "1")]
    pub dcb_tos: ::core::option::Option<CarrierTosEntry>,
    #[prost(message, optional, tag = "2")]
    pub pii_tos: ::core::option::Option<CarrierTosEntry>,
    #[prost(bool, optional, tag = "3")]
    pub needs_dcb_tos_acceptance: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "4")]
    pub needs_pii_tos_acceptance: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CarrierTosEntry {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub version: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct CreditCardInstrument {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub escrow_handle: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub last_digits: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "4")]
    pub expiration_month: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "5")]
    pub expiration_year: ::core::option::Option<i32>,
    #[prost(message, repeated, tag = "6")]
    pub escrow_efe_param: ::prost::alloc::vec::Vec<EfeParam>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DeviceAssociation {
    #[prost(string, optional, tag = "1")]
    pub user_token_request_message: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub user_token_request_address: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DisabledInfo {
    #[prost(int32, optional, tag = "1")]
    pub disabled_reason: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub disabled_message_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub error_message: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EfeParam {
    #[prost(int32, optional, tag = "1")]
    pub key: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub value: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Instrument {
    #[prost(string, optional, tag = "1")]
    pub instrument_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub billing_address: ::core::option::Option<Address>,
    #[prost(message, optional, tag = "3")]
    pub credit_card: ::core::option::Option<CreditCardInstrument>,
    #[prost(message, optional, tag = "4")]
    pub carrier_billing: ::core::option::Option<CarrierBillingInstrument>,
    #[prost(message, optional, tag = "5")]
    pub billing_address_spec: ::core::option::Option<BillingAddressSpec>,
    #[prost(int32, optional, tag = "6")]
    pub instrument_family: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "7")]
    pub carrier_billing_status: ::core::option::Option<CarrierBillingInstrumentStatus>,
    #[prost(string, optional, tag = "8")]
    pub display_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "9")]
    pub topup_info_deprecated: ::core::option::Option<TopupInfo>,
    #[prost(int32, optional, tag = "10")]
    pub version: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "11")]
    pub stored_value: ::core::option::Option<StoredValueInstrument>,
    #[prost(message, repeated, tag = "12")]
    pub disabled_info: ::prost::alloc::vec::Vec<DisabledInfo>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct InstrumentSetupInfo {
    #[prost(int32, optional, tag = "1")]
    pub instrument_family: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "2")]
    pub supported: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "3")]
    pub address_challenge: ::core::option::Option<AddressChallenge>,
    #[prost(message, optional, tag = "4")]
    pub balance: ::core::option::Option<Money>,
    #[prost(string, repeated, tag = "5")]
    pub footer_html: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PasswordPrompt {
    #[prost(string, optional, tag = "1")]
    pub prompt: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub forgot_password_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StoredValueInstrument {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub balance: ::core::option::Option<Money>,
    #[prost(message, optional, tag = "3")]
    pub topup_info: ::core::option::Option<TopupInfo>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TopupInfo {
    #[prost(string, optional, tag = "1")]
    pub options_container_doc_id_deprecated: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub options_list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub options_container_doc_id: ::core::option::Option<DocId>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ConsumePurchaseResponse {
    #[prost(message, optional, tag = "1")]
    pub library_update: ::core::option::Option<LibraryUpdate>,
    #[prost(int32, optional, tag = "2")]
    pub status: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ContainerMetadata {
    #[prost(string, optional, tag = "1")]
    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(double, optional, tag = "3")]
    pub relevance: ::core::option::Option<f64>,
    #[prost(int64, optional, tag = "4")]
    pub estimated_results: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "5")]
    pub analytics_cookie: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "6")]
    pub ordered: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "7")]
    pub container_view: ::prost::alloc::vec::Vec<ContainerView>,
    #[prost(message, optional, tag = "8")]
    pub left_icon: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ContainerView {
    #[prost(bool, optional, tag = "1")]
    pub selected: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "2")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "4")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[allow(dead_code)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct FlagContentResponse {}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ClientDownloadRequest {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub digests: ::core::option::Option<client_download_request::Digests>,
    #[prost(int64, optional, tag = "3")]
    pub length: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "4")]
    pub resources: ::prost::alloc::vec::Vec<client_download_request::Resource>,
    #[prost(message, optional, tag = "5")]
    pub signature: ::core::option::Option<client_download_request::SignatureInfo>,
    #[prost(bool, optional, tag = "6")]
    pub user_initiated: ::core::option::Option<bool>,
    #[prost(string, repeated, tag = "8")]
    pub client_asn: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "9")]
    pub file_basename: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "10")]
    pub download_type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "11")]
    pub locale: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "12")]
    pub apk_info: ::core::option::Option<client_download_request::ApkInfo>,
    #[prost(fixed64, optional, tag = "13")]
    pub android_id: ::core::option::Option<u64>,
    #[prost(string, repeated, tag = "15")]
    pub originating_packages: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "17")]
    pub originating_signature: ::core::option::Option<client_download_request::SignatureInfo>,
}
/// Nested message and enum types in `ClientDownloadRequest`.
pub mod client_download_request {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct ApkInfo {
        #[prost(string, optional, tag = "1")]
        pub package_name: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(int32, optional, tag = "2")]
        pub version_code: ::core::option::Option<i32>,
    }
    #[derive(Clone, PartialEq, Eq, ::prost::Message)]
    pub struct CertificateChain {
        #[prost(message, repeated, tag = "1")]
        pub element: ::prost::alloc::vec::Vec<certificate_chain::Element>,
    }
    /// Nested message and enum types in `CertificateChain`.
    pub mod certificate_chain {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Element {
            #[prost(bytes = "vec", optional, tag = "1")]
            pub certificate: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            #[prost(bool, optional, tag = "2")]
            pub parsed_successfully: ::core::option::Option<bool>,
            #[prost(bytes = "vec", optional, tag = "3")]
            pub subject: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            #[prost(bytes = "vec", optional, tag = "4")]
            pub issuer: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            #[prost(bytes = "vec", optional, tag = "5")]
            pub fingerprint: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            #[prost(int64, optional, tag = "6")]
            pub expiry_time: ::core::option::Option<i64>,
            #[prost(int64, optional, tag = "7")]
            pub start_time: ::core::option::Option<i64>,
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Digests {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub sha256: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "2")]
        pub sha1: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "3")]
        pub md5: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Resource {
        #[prost(string, optional, tag = "1")]
        pub url: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(int32, optional, tag = "2")]
        pub r#type: ::core::option::Option<i32>,
        #[prost(bytes = "vec", optional, tag = "3")]
        pub remote_ip: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(string, optional, tag = "4")]
        pub referrer: ::core::option::Option<::prost::alloc::string::String>,
    }
    #[derive(Clone, PartialEq, Eq, ::prost::Message)]
    pub struct SignatureInfo {
        #[prost(message, repeated, tag = "1")]
        pub certificate_chain: ::prost::alloc::vec::Vec<CertificateChain>,
        #[prost(bool, optional, tag = "2")]
        pub trusted: ::core::option::Option<bool>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ClientDownloadResponse {
    #[prost(int32, optional, tag = "1")]
    pub verdict: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub more_info: ::core::option::Option<client_download_response::MoreInfo>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
/// Nested message and enum types in `ClientDownloadResponse`.
pub mod client_download_response {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct MoreInfo {
        #[prost(string, optional, tag = "1")]
        pub description: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "2")]
        pub url: ::core::option::Option<::prost::alloc::string::String>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ClientDownloadStatsRequest {
    #[prost(int32, optional, tag = "1")]
    pub user_decision: ::core::option::Option<i32>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DebugInfo {
    #[prost(string, repeated, tag = "1")]
    pub message: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(group, repeated, tag = "2")]
    pub timing: ::prost::alloc::vec::Vec<debug_info::Timing>,
}
/// Nested message and enum types in `DebugInfo`.
pub mod debug_info {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Timing {
        #[prost(string, optional, tag = "3")]
        pub name: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(double, optional, tag = "4")]
        pub time_in_ms: ::core::option::Option<f64>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DebugSettingsResponse {
    #[prost(string, optional, tag = "1")]
    pub play_country_override: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub play_country_debug_info: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct DeliveryResponse {
    #[prost(int32, optional, tag = "1", default = "1")]
    pub status: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub app_delivery_data: ::core::option::Option<AndroidAppDeliveryData>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BulkDetailsEntry {
    #[prost(message, optional, tag = "1")]
    pub item: ::core::option::Option<Item>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BulkDetailsRequest {
    #[prost(string, repeated, tag = "1")]
    pub doc_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "2", default = "true")]
    pub include_child_docs: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "3")]
    pub include_details: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "4")]
    pub source_package_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, repeated, packed = "false", tag = "7")]
    pub installed_version_code: ::prost::alloc::vec::Vec<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BulkDetailsResponse {
    #[prost(message, repeated, tag = "1")]
    pub entry: ::prost::alloc::vec::Vec<BulkDetailsEntry>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DetailsResponse {
    #[prost(string, optional, tag = "2")]
    pub analytics_cookie: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub user_review: ::core::option::Option<Review>,
    #[prost(message, optional, tag = "4")]
    pub item: ::core::option::Option<Item>,
    #[prost(string, optional, tag = "5")]
    pub footer_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "6")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, repeated, tag = "7")]
    pub discovery_badge: ::prost::alloc::vec::Vec<DiscoveryBadge>,
    #[prost(bool, optional, tag = "8", default = "true")]
    pub enable_reviews: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "12")]
    pub features: ::core::option::Option<Features>,
    #[prost(string, optional, tag = "13")]
    pub details_stream_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "14")]
    pub user_review_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "17")]
    pub post_acquire_details_stream_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DiscoveryBadge {
    #[prost(string, optional, tag = "1")]
    pub label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub image: ::core::option::Option<Image>,
    #[prost(int32, optional, tag = "3")]
    pub background_color: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "4")]
    pub badge_container1: ::core::option::Option<DiscoveryBadgeLink>,
    #[prost(bytes = "vec", optional, tag = "5")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bool, optional, tag = "6")]
    pub is_plus_one: ::core::option::Option<bool>,
    #[prost(float, optional, tag = "7")]
    pub aggregate_rating: ::core::option::Option<f32>,
    #[prost(int32, optional, tag = "8")]
    pub user_star_rating: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "9")]
    pub download_count: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "10")]
    pub download_units: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "11")]
    pub content_description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "12")]
    pub player_badge: ::core::option::Option<PlayerBadge>,
    #[prost(bytes = "vec", optional, tag = "13")]
    pub family_age_range_badge: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "14")]
    pub family_category_badge: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PlayerBadge {
    #[prost(message, optional, tag = "1")]
    pub overlay_icon: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DiscoveryBadgeLink {
    #[prost(message, optional, tag = "1")]
    pub link: ::core::option::Option<Link>,
    #[prost(string, optional, tag = "2")]
    pub user_reviews_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub critic_reviews_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Features {
    #[prost(message, repeated, tag = "1")]
    pub feature_presence: ::prost::alloc::vec::Vec<Feature>,
    #[prost(message, repeated, tag = "2")]
    pub feature_rating: ::prost::alloc::vec::Vec<Feature>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Feature {
    #[prost(string, optional, tag = "1")]
    pub label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub value: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct DeviceConfigurationProto {
    #[prost(int32, optional, tag = "1")]
    pub touch_screen: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub keyboard: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "3")]
    pub navigation: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "4")]
    pub screen_layout: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "5")]
    pub has_hard_keyboard: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "6")]
    pub has_five_way_navigation: ::core::option::Option<bool>,
    #[prost(int32, optional, tag = "7")]
    pub screen_density: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "8")]
    pub gl_es_version: ::core::option::Option<i32>,
    #[prost(string, repeated, tag = "9")]
    pub system_shared_library: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "10")]
    pub system_available_feature: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "11")]
    pub native_platform: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "12")]
    pub screen_width: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "13")]
    pub screen_height: ::core::option::Option<i32>,
    #[prost(string, repeated, tag = "14")]
    pub system_supported_locale: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "15")]
    pub gl_extension: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "16")]
    pub device_class: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "17", default = "50")]
    pub max_apk_download_size_mb: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "18")]
    pub smallest_screen_width_dp: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "19", default = "0")]
    pub low_ram_device: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "20", default = "8354971648")]
    pub total_memory_bytes: ::core::option::Option<i64>,
    #[prost(int32, optional, tag = "21", default = "8")]
    pub max_num_of_cpu_cores: ::core::option::Option<i32>,
    #[prost(message, repeated, tag = "26")]
    pub device_feature: ::prost::alloc::vec::Vec<DeviceFeature>,
    #[prost(int32, optional, tag = "28", default = "0")]
    pub unknown28: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "30", default = "4")]
    pub unknown30: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DeviceFeature {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2")]
    pub value: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Document {
    #[prost(message, optional, tag = "1")]
    pub doc_id: ::core::option::Option<DocId>,
    #[prost(message, optional, tag = "2")]
    pub fetch_doc_id: ::core::option::Option<DocId>,
    #[prost(message, optional, tag = "3")]
    pub sample_doc_id: ::core::option::Option<DocId>,
    #[prost(string, optional, tag = "4")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "6")]
    pub snippet: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "7")]
    pub price_deprecated: ::core::option::Option<Offer>,
    #[prost(message, optional, tag = "9")]
    pub availability: ::core::option::Option<Availability>,
    #[prost(message, repeated, tag = "10")]
    pub image: ::prost::alloc::vec::Vec<Image>,
    #[prost(message, repeated, tag = "11")]
    pub child: ::prost::alloc::vec::Vec<Self>,
    #[prost(message, optional, tag = "13")]
    pub aggregate_rating: ::core::option::Option<AggregateRating>,
    #[prost(message, repeated, tag = "14")]
    pub offer: ::prost::alloc::vec::Vec<Offer>,
    #[prost(message, repeated, tag = "15")]
    pub translated_snippet: ::prost::alloc::vec::Vec<TranslatedText>,
    #[prost(message, repeated, tag = "16")]
    pub document_variant: ::prost::alloc::vec::Vec<DocumentVariant>,
    #[prost(string, repeated, tag = "17")]
    pub category_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "18")]
    pub decoration: ::prost::alloc::vec::Vec<Self>,
    #[prost(message, repeated, tag = "19")]
    pub parent: ::prost::alloc::vec::Vec<Self>,
    #[prost(string, optional, tag = "20")]
    pub privacy_policy_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "21")]
    pub consumption_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "22")]
    pub estimated_num_children: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "23")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DocumentVariant {
    #[prost(int32, optional, tag = "1")]
    pub variation_type: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub rule: ::core::option::Option<Rule>,
    #[prost(string, optional, tag = "3")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "4")]
    pub snippet: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub recent_changes: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "6")]
    pub auto_translation: ::prost::alloc::vec::Vec<TranslatedText>,
    #[prost(message, repeated, tag = "7")]
    pub offer: ::prost::alloc::vec::Vec<Offer>,
    #[prost(int64, optional, tag = "9")]
    pub channel_id: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "10")]
    pub child: ::prost::alloc::vec::Vec<Document>,
    #[prost(message, repeated, tag = "11")]
    pub decoration: ::prost::alloc::vec::Vec<Document>,
    #[prost(message, repeated, tag = "12")]
    pub image: ::prost::alloc::vec::Vec<Image>,
    #[prost(string, repeated, tag = "13")]
    pub category_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "14")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct SectionImage {
    #[prost(message, repeated, tag = "1")]
    pub image_container: ::prost::alloc::vec::Vec<ImageContainer>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ImageContainer {
    #[prost(message, optional, tag = "4")]
    pub image: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Image {
    #[prost(int32, optional, tag = "1")]
    pub image_type: ::core::option::Option<i32>,
    #[prost(group, optional, tag = "2")]
    pub dimension: ::core::option::Option<image::Dimension>,
    #[prost(string, optional, tag = "5")]
    pub image_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub alt_text_localized: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub secure_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "8")]
    pub position_in_sequence: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "9")]
    pub supports_fife_url_options: ::core::option::Option<bool>,
    #[prost(group, optional, tag = "10")]
    pub citation: ::core::option::Option<image::Citation>,
    #[prost(int32, optional, tag = "14")]
    pub duration_seconds: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "15")]
    pub fill_color_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "16")]
    pub autogen: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "17")]
    pub attribution: ::core::option::Option<Attribution>,
    #[prost(string, optional, tag = "19")]
    pub background_color_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "20")]
    pub palette: ::core::option::Option<ImagePalette>,
    #[prost(int32, optional, tag = "21")]
    pub device_class: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "22")]
    pub supports_fife_monogram_option: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "28")]
    pub image_url_alt: ::core::option::Option<::prost::alloc::string::String>,
}
/// Nested message and enum types in `Image`.
pub mod image {
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Dimension {
        #[prost(int32, optional, tag = "3")]
        pub width: ::core::option::Option<i32>,
        #[prost(int32, optional, tag = "4")]
        pub height: ::core::option::Option<i32>,
        #[prost(int32, optional, tag = "18")]
        pub aspect_ratio: ::core::option::Option<i32>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Citation {
        #[prost(string, optional, tag = "11")]
        pub title_localized: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "12")]
        pub url: ::core::option::Option<::prost::alloc::string::String>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Attribution {
    #[prost(string, optional, tag = "1")]
    pub source_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub source_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub license_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub license_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ImagePalette {
    #[prost(string, optional, tag = "1")]
    pub light_vibrant_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub vibrant_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub dark_vibrant_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub light_muted_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub muted_rgb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub dark_muted_rgb: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TranslatedText {
    #[prost(string, optional, tag = "1")]
    pub text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub source_locale: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub target_locale: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PlusOneData {
    #[prost(bool, optional, tag = "1")]
    pub set_by_user: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "2")]
    pub total: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "3")]
    pub circles_total: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "4")]
    pub circles_people: ::prost::alloc::vec::Vec<PlusPerson>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PlusPerson {
    #[prost(string, optional, tag = "2")]
    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub profile_image_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AppDetails {
    #[prost(string, optional, tag = "1")]
    pub developer_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2")]
    pub major_version_number: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "3")]
    pub version_code: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "4")]
    pub version_string: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "7")]
    pub app_category: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "8")]
    pub content_rating: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "9")]
    pub info_download_size: ::core::option::Option<i64>,
    #[prost(string, repeated, tag = "10")]
    pub permission: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "11")]
    pub developer_email: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub developer_website: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "13")]
    pub info_download: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "14")]
    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "15")]
    pub recent_changes_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "16")]
    pub info_updated_on: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "17")]
    pub file: ::prost::alloc::vec::Vec<FileMetadata>,
    #[prost(string, optional, tag = "18")]
    pub app_type: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "19")]
    pub certificate_hash: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "21", default = "true")]
    pub varies_with_device: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "22")]
    pub certificate_set: ::prost::alloc::vec::Vec<CertificateSet>,
    #[prost(string, repeated, tag = "23")]
    pub auto_acquire_free_app_if_higher_version_available_tag:
        ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "24")]
    pub has_instant_link: ::core::option::Option<bool>,
    #[prost(string, repeated, tag = "25")]
    pub split_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "26")]
    pub gamepad_required: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "27")]
    pub externally_hosted: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "28")]
    pub ever_externally_hosted: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "30")]
    pub install_notes: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "31")]
    pub install_location: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "32")]
    pub target_sdk_version: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "33")]
    pub has_preregistration_promo_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "34")]
    pub dependencies: ::core::option::Option<Dependencies>,
    #[prost(message, optional, tag = "35")]
    pub testing_program_info: ::core::option::Option<TestingProgramInfo>,
    #[prost(message, optional, tag = "36")]
    pub early_access_info: ::core::option::Option<EarlyAccessInfo>,
    #[prost(message, optional, tag = "41")]
    pub editor_choice: ::core::option::Option<EditorChoice>,
    #[prost(string, optional, tag = "43")]
    pub instant_link: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "45")]
    pub developer_address: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "46")]
    pub publisher: ::core::option::Option<Publisher>,
    #[prost(string, optional, tag = "48")]
    pub category_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "53")]
    pub download_count: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "61")]
    pub download_label_display: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "64")]
    pub app_launch: ::core::option::Option<AppLaunch>,
    #[prost(message, optional, tag = "66")]
    pub tag_group: ::core::option::Option<TagGroup>,
    #[prost(string, optional, tag = "67")]
    pub in_app_product: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "77")]
    pub download_label_abbreviated: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "78")]
    pub download_label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "82")]
    pub compatibility: ::core::option::Option<Compatibility>,
    #[prost(message, optional, tag = "86")]
    pub support: ::core::option::Option<Support>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AppLaunch {
    #[prost(string, optional, tag = "1")]
    pub date: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub time: ::core::option::Option<app_launch::Time>,
}
/// Nested message and enum types in `AppLaunch`.
pub mod app_launch {
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Time {
        #[prost(int64, optional, tag = "1")]
        pub timestamp: ::core::option::Option<i64>,
        /// nanoseconds?
        #[prost(int64, optional, tag = "2")]
        pub unknown: ::core::option::Option<i64>,
    }
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct TagGroup {
    /// Lazy to guess the type names, please adjust if needed.
    #[prost(message, optional, tag = "1")]
    pub type1: ::core::option::Option<TagType>,
    #[prost(message, optional, tag = "2")]
    pub type2: ::core::option::Option<TagType>,
    #[prost(message, optional, tag = "3")]
    pub type3: ::core::option::Option<TagType>,
    #[prost(message, optional, tag = "4")]
    pub type4: ::core::option::Option<TagType>,
    #[prost(message, optional, tag = "5")]
    pub type5: ::core::option::Option<TagType>,
    #[prost(message, optional, tag = "6")]
    pub type6: ::core::option::Option<TagType>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct TagType {
    #[prost(message, repeated, tag = "1")]
    pub entries: ::prost::alloc::vec::Vec<TagEntry>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TagEntry {
    #[prost(string, optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub metadata: ::core::option::Option<TagMetadata>,
    #[prost(string, optional, tag = "3")]
    pub category: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TagMetadata {
    #[prost(oneof = "tag_metadata::Metadata", tags = "3, 4")]
    pub metadata: ::core::option::Option<tag_metadata::Metadata>,
}
/// Nested message and enum types in `TagMetadata`.
pub mod tag_metadata {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Metadata {
        #[prost(message, tag = "3")]
        Category(super::TagData),
        #[prost(message, tag = "4")]
        Search(super::TagData),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TagData {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub label: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Support {
    #[prost(string, optional, tag = "1")]
    pub developer_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub developer_email: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub developer_address: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub developer_phone_number: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Compatibility {
    #[prost(message, repeated, tag = "1")]
    pub active_devices: ::prost::alloc::vec::Vec<ActiveDevice>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ActiveDevice {
    #[prost(string, optional, tag = "1")]
    pub required_os: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ModifyLibrary {
    #[prost(string, optional, tag = "1")]
    pub id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub package_to_add: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub package_to_remove: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Publisher {
    #[prost(message, optional, tag = "2")]
    pub publisher_stream: ::core::option::Option<PublisherStream>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PublisherStream {
    #[prost(string, optional, tag = "3")]
    pub more_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "11")]
    pub query: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "83")]
    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EditorChoice {
    #[prost(string, repeated, tag = "1")]
    pub bulletins: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub stream: ::core::option::Option<SubStream>,
    #[prost(string, optional, tag = "4")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CertificateSet {
    #[prost(string, optional, tag = "1")]
    pub certificate_hash: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub sha256: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Dependencies {
    #[prost(int32, optional, tag = "1")]
    pub unknown: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "2")]
    pub size: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "3")]
    pub dependency: ::prost::alloc::vec::Vec<Dependency>,
    #[prost(int32, optional, tag = "4")]
    pub target_sdk: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "5")]
    pub unknown2: ::core::option::Option<i32>,
    #[prost(string, repeated, tag = "11")]
    pub split_apks: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "13")]
    pub library_dependency: ::prost::alloc::vec::Vec<LibraryDependency>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Dependency {
    #[prost(string, optional, tag = "1")]
    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2")]
    pub version: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "4")]
    pub unknown4: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LibraryDependency {
    #[prost(string, optional, tag = "1")]
    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "2")]
    pub version_code: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct TestingProgramInfo {
    #[prost(bool, optional, tag = "2")]
    pub subscribed: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "3")]
    pub subscribed_and_installed: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "5")]
    pub email: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "6")]
    pub image: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EarlyAccessInfo {
    #[prost(string, optional, tag = "3")]
    pub email: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct DocumentDetails {
    #[prost(message, optional, tag = "1")]
    pub app_details: ::core::option::Option<AppDetails>,
    #[prost(message, optional, tag = "7")]
    pub subscription_details: ::core::option::Option<SubscriptionDetails>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PatchDetails {
    #[prost(int32, optional, tag = "1")]
    pub base_version_code: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "2")]
    pub size: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct FileMetadata {
    #[prost(int32, optional, tag = "1")]
    pub file_type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub version_code: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "3")]
    pub size: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "4")]
    pub split_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "5")]
    pub compressed_size: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "6")]
    pub patch_details: ::prost::alloc::vec::Vec<PatchDetails>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SubscriptionDetails {
    #[prost(int32, optional, tag = "1")]
    pub subscription_period: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Bucket {
    #[prost(bool, optional, tag = "2")]
    pub multi_corpus: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "3")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub icon_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub full_contents_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(double, optional, tag = "6")]
    pub relevance: ::core::option::Option<f64>,
    #[prost(int64, optional, tag = "7")]
    pub estimated_results: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "8")]
    pub analytics_cookie: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "9")]
    pub full_contents_list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "10")]
    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "11")]
    pub ordered: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListResponse {
    #[prost(message, repeated, tag = "1")]
    pub bucket: ::prost::alloc::vec::Vec<Bucket>,
    #[prost(message, optional, tag = "2")]
    pub item: ::core::option::Option<Item>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Item {
    #[prost(string, optional, tag = "1")]
    pub id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub sub_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "3")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "4")]
    pub category_id: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "5")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub creator: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "8")]
    pub offer: ::prost::alloc::vec::Vec<Offer>,
    #[prost(message, optional, tag = "9")]
    pub availability: ::core::option::Option<Availability>,
    #[prost(message, repeated, tag = "10")]
    pub image: ::prost::alloc::vec::Vec<Image>,
    #[prost(message, repeated, tag = "11")]
    pub sub_item: ::prost::alloc::vec::Vec<Self>,
    #[prost(message, optional, tag = "12")]
    pub container_metadata: ::core::option::Option<ContainerMetadata>,
    #[prost(message, optional, tag = "13")]
    pub details: ::core::option::Option<DocumentDetails>,
    #[prost(message, optional, tag = "14")]
    pub aggregate_rating: ::core::option::Option<AggregateRating>,
    #[prost(message, optional, tag = "15")]
    pub annotations: ::core::option::Option<Annotations>,
    #[prost(string, optional, tag = "16")]
    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "17")]
    pub share_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "18")]
    pub reviews_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "19")]
    pub backend_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "20")]
    pub purchase_details_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "21")]
    pub details_reusable: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "22")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "23")]
    pub translated_description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "24")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, optional, tag = "25")]
    pub app_info: ::core::option::Option<AppInfo>,
    #[prost(bool, optional, tag = "26")]
    pub mature: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "27")]
    pub promotional_description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "29")]
    pub available_for_preregistration: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "30")]
    pub tip: ::prost::alloc::vec::Vec<ReviewTip>,
    #[prost(string, optional, tag = "31")]
    pub review_snippets_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "32")]
    pub force_shareability: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "33")]
    pub use_wishlist_as_primary_action: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "34")]
    pub review_questions_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "39")]
    pub review_summary_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "50")]
    pub content_rating: ::core::option::Option<ContentRating>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ContentRating {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub recommendation_and_description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub content_rating_image: ::core::option::Option<content_rating::ContentRatingImage>,
    #[prost(string, optional, tag = "5")]
    pub recommendation: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
}
/// Nested message and enum types in `ContentRating`.
pub mod content_rating {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct ContentRatingImage {
        #[prost(message, optional, tag = "3")]
        pub dimension: ::core::option::Option<content_rating_image::Dimension>,
        #[prost(message, optional, tag = "6")]
        pub image: ::core::option::Option<content_rating_image::Image>,
    }
    /// Nested message and enum types in `ContentRatingImage`.
    pub mod content_rating_image {
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Dimension {
            #[prost(int32, optional, tag = "3")]
            pub width: ::core::option::Option<i32>,
            #[prost(int32, optional, tag = "4")]
            pub height: ::core::option::Option<i32>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Image {
            #[prost(string, optional, tag = "1")]
            pub url: ::core::option::Option<::prost::alloc::string::String>,
        }
    }
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AppInfo {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "2")]
    pub section: ::prost::alloc::vec::Vec<AppInfoSection>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AppInfoSection {
    #[prost(string, optional, tag = "1")]
    pub label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub container: ::core::option::Option<AppInfoContainer>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AppInfoContainer {
    #[prost(message, optional, tag = "1")]
    pub image: ::core::option::Option<Image>,
    #[prost(string, optional, tag = "2")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Annotations {
    #[prost(message, optional, tag = "1")]
    pub section_related: ::core::option::Option<SectionMetaData>,
    #[prost(message, optional, tag = "2")]
    pub section_more_by: ::core::option::Option<SectionMetaData>,
    #[prost(message, repeated, tag = "4")]
    pub warning: ::prost::alloc::vec::Vec<Warning>,
    #[prost(message, optional, tag = "5")]
    pub section_body_of_work: ::core::option::Option<SectionMetaData>,
    #[prost(message, optional, tag = "6")]
    pub section_core_content: ::core::option::Option<SectionMetaData>,
    #[prost(message, optional, tag = "7")]
    pub overlay_meta_data: ::core::option::Option<OverlayMetaData>,
    #[prost(message, repeated, tag = "8")]
    pub badge_for_creator: ::prost::alloc::vec::Vec<Badge>,
    #[prost(message, repeated, tag = "9")]
    pub info_badge: ::prost::alloc::vec::Vec<Badge>,
    #[prost(message, optional, tag = "10")]
    pub annotation_link: ::core::option::Option<AnnotationLink>,
    #[prost(message, optional, tag = "11")]
    pub section_cross_sell: ::core::option::Option<SectionMetaData>,
    #[prost(message, optional, tag = "12")]
    pub section_related_item_type: ::core::option::Option<SectionMetaData>,
    #[prost(message, repeated, tag = "13")]
    pub promoted_doc: ::prost::alloc::vec::Vec<PromotedDoc>,
    #[prost(string, optional, tag = "14")]
    pub offer_note: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "18")]
    pub privacy_policy_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "19")]
    pub suggestion_reasons: ::core::option::Option<SuggestionReasons>,
    #[prost(message, optional, tag = "20")]
    pub optimal_device_class_warning: ::core::option::Option<Warning>,
    #[prost(message, optional, tag = "21")]
    pub badge_container: ::core::option::Option<BadgeContainer>,
    #[prost(message, optional, tag = "22")]
    pub section_suggest_for_rating: ::core::option::Option<SectionMetaData>,
    #[prost(message, optional, tag = "24")]
    pub section_purchase_cross_sell: ::core::option::Option<SectionMetaData>,
    #[prost(message, repeated, tag = "25")]
    pub overflow_link: ::prost::alloc::vec::Vec<OverflowLink>,
    #[prost(string, optional, tag = "27")]
    pub attribution_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "28")]
    pub purchase_history_details: ::core::option::Option<PurchaseHistoryDetails>,
    #[prost(message, optional, tag = "29")]
    pub badge_for_legacy_rating: ::core::option::Option<Badge>,
    #[prost(message, repeated, tag = "30")]
    pub voucher_info: ::prost::alloc::vec::Vec<VoucherInfo>,
    #[prost(message, optional, tag = "32")]
    pub section_featured_apps: ::core::option::Option<SectionMetaData>,
    #[prost(message, repeated, tag = "34")]
    pub details_page_cluster: ::prost::alloc::vec::Vec<SectionMetaData>,
    #[prost(message, optional, tag = "35")]
    pub video_annotations: ::core::option::Option<VideoAnnotations>,
    #[prost(message, optional, tag = "36")]
    pub section_purchase_related_topics: ::core::option::Option<SectionMetaData>,
    #[prost(message, optional, tag = "37")]
    pub my_subscription_details: ::core::option::Option<MySubscriptionDetails>,
    #[prost(message, optional, tag = "38")]
    pub my_reward_details: ::core::option::Option<MyRewardDetails>,
    #[prost(message, repeated, tag = "39")]
    pub feature_badge: ::prost::alloc::vec::Vec<Badge>,
    #[prost(message, optional, tag = "42")]
    pub snippet: ::core::option::Option<Snippet>,
    #[prost(string, optional, tag = "48")]
    pub downloads_label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "50")]
    pub badge_for_rating: ::core::option::Option<Badge>,
    #[prost(message, optional, tag = "53")]
    pub category_info: ::core::option::Option<CategoryInfo>,
    #[prost(message, optional, tag = "60")]
    pub reasons: ::core::option::Option<EditorReason>,
    #[prost(message, optional, tag = "65")]
    pub top_chart_stream: ::core::option::Option<Stream>,
    #[prost(string, optional, tag = "66")]
    pub category_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "71")]
    pub chip: ::prost::alloc::vec::Vec<Chip>,
    #[prost(message, repeated, tag = "72")]
    pub display_badge: ::prost::alloc::vec::Vec<Badge>,
    #[prost(string, optional, tag = "80")]
    pub live_stream_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "85")]
    pub promotion_stream_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "91")]
    pub overlay_meta_data_extra: ::core::option::Option<OverlayMetaData>,
    #[prost(message, optional, tag = "94")]
    pub section_image: ::core::option::Option<SectionImage>,
    #[prost(message, optional, tag = "97")]
    pub category_stream: ::core::option::Option<SubStream>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EditorReason {
    #[prost(string, repeated, tag = "1")]
    pub bulletin: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SectionMetaData {
    #[prost(string, optional, tag = "1")]
    pub header: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OverlayMetaData {
    #[prost(message, optional, tag = "1")]
    pub overlay_header: ::core::option::Option<OverlayHeader>,
    #[prost(message, optional, tag = "181")]
    pub overlay_title: ::core::option::Option<OverlayTitle>,
    #[prost(message, optional, tag = "182")]
    pub overlay_description: ::core::option::Option<OverlayDescription>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OverlayHeader {}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OverlayTitle {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub composite_image: ::core::option::Option<CompositeImage>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CompositeImage {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "5")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "9")]
    pub type_alt: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "24")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "28")]
    pub url_alt: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OverlayDescription {
    #[prost(string, optional, tag = "2")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct SuggestionReasons {
    #[prost(message, repeated, tag = "2")]
    pub reason: ::prost::alloc::vec::Vec<Reason>,
    #[prost(message, optional, tag = "4")]
    pub neutral_dismissal: ::core::option::Option<Dismissal>,
    #[prost(message, optional, tag = "5")]
    pub positive_dismissal: ::core::option::Option<Dismissal>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Reason {
    #[prost(string, optional, tag = "3")]
    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub reason_plus_one: ::core::option::Option<ReasonPlusOne>,
    #[prost(message, optional, tag = "5")]
    pub reason_review: ::core::option::Option<ReasonReview>,
    #[prost(message, optional, tag = "7")]
    pub dismissal: ::core::option::Option<Dismissal>,
    #[prost(message, optional, tag = "9")]
    pub reason_user_action: ::core::option::Option<ReasonUserAction>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ReasonPlusOne {
    #[prost(string, optional, tag = "1")]
    pub localized_description_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "3")]
    pub user_profile: ::prost::alloc::vec::Vec<UserProfile>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ReasonReview {
    #[prost(message, optional, tag = "1")]
    pub review: ::core::option::Option<Review>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ReasonUserAction {
    #[prost(message, optional, tag = "1")]
    pub user_profile: ::core::option::Option<UserProfile>,
    #[prost(string, optional, tag = "2")]
    pub localized_description_html: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Dismissal {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub description_html: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Snippet {
    #[prost(string, optional, tag = "1")]
    pub snippet_html: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MyRewardDetails {
    #[prost(int64, optional, tag = "1")]
    pub expiration_time_millis: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub expiration_description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub button_label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub link_action: ::core::option::Option<Link>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct MySubscriptionDetails {
    #[prost(string, optional, tag = "1")]
    pub subscription_status_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub title_by_line_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub formatted_price: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub price_by_line_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "6")]
    pub cancel_subscription: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "7")]
    pub payment_declined_learn_more_link: ::core::option::Option<Link>,
    #[prost(bool, optional, tag = "8")]
    pub in_trial_period: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "9")]
    pub title_by_line_icon: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct VideoAnnotations {
    #[prost(bool, optional, tag = "1")]
    pub bundle: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "2")]
    pub bundle_content_list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub extras_content_list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub also_available_in_list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "5")]
    pub bundle_doc_id: ::prost::alloc::vec::Vec<DocId>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct VoucherInfo {
    #[prost(message, optional, tag = "1")]
    pub item: ::core::option::Option<Item>,
    #[prost(message, repeated, tag = "2")]
    pub offer: ::prost::alloc::vec::Vec<Offer>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct BadgeContainer {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "2")]
    pub image: ::prost::alloc::vec::Vec<Image>,
    #[prost(message, repeated, tag = "3")]
    pub badge: ::prost::alloc::vec::Vec<Badge>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OverflowLink {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub link: ::core::option::Option<Link>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PromotedDoc {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "3")]
    pub image: ::prost::alloc::vec::Vec<Image>,
    #[prost(string, optional, tag = "4")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub details_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Warning {
    #[prost(string, optional, tag = "1")]
    pub localized_message: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AnnotationLink {
    #[prost(string, optional, tag = "1")]
    pub uri: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub resolved_link: ::core::option::Option<ResolvedLink>,
    #[prost(int32, optional, tag = "3")]
    pub uri_backend: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Rated {
    #[prost(string, optional, tag = "1")]
    pub label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub image: ::core::option::Option<Image>,
    #[prost(string, optional, tag = "4")]
    pub learn_more_html_link: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Badge {
    #[prost(string, optional, tag = "1")]
    pub major: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub image: ::core::option::Option<Image>,
    #[prost(string, optional, tag = "3")]
    pub minor: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub minor_html: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "6")]
    pub sub_badge: ::core::option::Option<SubBadge>,
    #[prost(message, optional, tag = "7")]
    pub link: ::core::option::Option<StreamLink>,
    #[prost(string, optional, tag = "8")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "12")]
    pub stream: ::core::option::Option<SubStream>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct SubBadge {
    #[prost(message, optional, tag = "1")]
    pub image: ::core::option::Option<Image>,
    #[prost(string, optional, tag = "4")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub link: ::core::option::Option<StreamLink>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Stream {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub stream: ::core::option::Option<SubStream>,
    #[prost(string, optional, tag = "3")]
    pub subtitle: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "83")]
    pub browse_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SubStream {
    #[prost(message, optional, tag = "2")]
    pub link: ::core::option::Option<StreamLink>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Link {
    #[prost(string, optional, tag = "1")]
    pub uri: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub resolved_link: ::core::option::Option<ResolvedLink>,
    #[prost(int32, optional, tag = "3")]
    pub uri_backend: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StreamLink {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub stream_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub search_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub sub_category_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "11")]
    pub search_query: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Chip {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub stream: ::core::option::Option<SubStream>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CategoryInfo {
    #[prost(string, optional, tag = "1")]
    pub category: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub app_category: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EncryptedSubscriberInfo {
    #[prost(string, optional, tag = "1")]
    pub data: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub encrypted_key: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub signature: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub init_vector: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "5")]
    pub google_key_version: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "6")]
    pub carrier_key_version: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Availability {
    #[prost(int32, optional, tag = "5")]
    pub restriction: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "6")]
    pub offer_type: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "7")]
    pub rule: ::core::option::Option<Rule>,
    #[prost(group, repeated, tag = "9")]
    pub perdeviceavailabilityrestriction:
        ::prost::alloc::vec::Vec<availability::PerDeviceAvailabilityRestriction>,
    #[prost(bool, optional, tag = "13")]
    pub available_if_owned: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "14")]
    pub install: ::prost::alloc::vec::Vec<Install>,
    #[prost(message, optional, tag = "16")]
    pub filter_info: ::core::option::Option<FilterEvaluationInfo>,
    #[prost(message, optional, tag = "17")]
    pub ownership_info: ::core::option::Option<OwnershipInfo>,
    #[prost(message, repeated, tag = "18")]
    pub availability_problem: ::prost::alloc::vec::Vec<AvailabilityProblem>,
    #[prost(bool, optional, tag = "21")]
    pub hidden: ::core::option::Option<bool>,
}
/// Nested message and enum types in `Availability`.
pub mod availability {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct PerDeviceAvailabilityRestriction {
        #[prost(fixed64, optional, tag = "10")]
        pub android_id: ::core::option::Option<u64>,
        #[prost(int32, optional, tag = "11")]
        pub device_restriction: ::core::option::Option<i32>,
        #[prost(int64, optional, tag = "12")]
        pub channel_id: ::core::option::Option<i64>,
        #[prost(message, optional, tag = "15")]
        pub filter_info: ::core::option::Option<super::FilterEvaluationInfo>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AvailabilityProblem {
    #[prost(int32, optional, tag = "1")]
    pub problem_type: ::core::option::Option<i32>,
    #[prost(string, repeated, tag = "2")]
    pub missing_value: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct FilterEvaluationInfo {
    #[prost(message, repeated, tag = "1")]
    pub rule_evaluation: ::prost::alloc::vec::Vec<RuleEvaluation>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Rule {
    #[prost(bool, optional, tag = "1")]
    pub negate: ::core::option::Option<bool>,
    #[prost(int32, optional, tag = "2")]
    pub operator: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "3")]
    pub key: ::core::option::Option<i32>,
    #[prost(string, repeated, tag = "4")]
    pub string_arg: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int64, repeated, packed = "false", tag = "5")]
    pub long_arg: ::prost::alloc::vec::Vec<i64>,
    #[prost(double, repeated, packed = "false", tag = "6")]
    pub double_arg: ::prost::alloc::vec::Vec<f64>,
    #[prost(message, repeated, tag = "7")]
    pub sub_rule: ::prost::alloc::vec::Vec<Self>,
    #[prost(int32, optional, tag = "8")]
    pub response_code: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "9")]
    pub comment: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(fixed64, repeated, packed = "false", tag = "10")]
    pub string_arg_hash: ::prost::alloc::vec::Vec<u64>,
    #[prost(int32, repeated, packed = "false", tag = "11")]
    pub const_arg: ::prost::alloc::vec::Vec<i32>,
    #[prost(int32, optional, tag = "12")]
    pub availability_problem_type: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "13")]
    pub include_missing_values: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RuleEvaluation {
    #[prost(message, optional, tag = "1")]
    pub rule: ::core::option::Option<Rule>,
    #[prost(string, repeated, tag = "2")]
    pub actual_string_value: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int64, repeated, packed = "false", tag = "3")]
    pub actual_long_value: ::prost::alloc::vec::Vec<i64>,
    #[prost(bool, repeated, packed = "false", tag = "4")]
    pub actual_bool_value: ::prost::alloc::vec::Vec<bool>,
    #[prost(double, repeated, packed = "false", tag = "5")]
    pub actual_double_value: ::prost::alloc::vec::Vec<f64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LibraryAppDetails {
    #[prost(string, optional, tag = "2")]
    pub certificate_hash: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "3")]
    pub refund_timeout_timestamp: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "4")]
    pub post_delivery_refund_window_millis: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LibraryInAppDetails {
    #[prost(string, optional, tag = "1")]
    pub signed_purchase_data: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub signature: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LibraryMutation {
    #[prost(message, optional, tag = "1")]
    pub doc_id: ::core::option::Option<DocId>,
    #[prost(int32, optional, tag = "2")]
    pub offer_type: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "3")]
    pub document_hash: ::core::option::Option<i64>,
    #[prost(bool, optional, tag = "4")]
    pub deleted: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "5")]
    pub app_details: ::core::option::Option<LibraryAppDetails>,
    #[prost(message, optional, tag = "6")]
    pub subscription_details: ::core::option::Option<LibrarySubscriptionDetails>,
    #[prost(message, optional, tag = "7")]
    pub in_app_details: ::core::option::Option<LibraryInAppDetails>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LibrarySubscriptionDetails {
    #[prost(int64, optional, tag = "1")]
    pub initiation_timestamp: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub valid_until_timestamp: ::core::option::Option<i64>,
    #[prost(bool, optional, tag = "3")]
    pub auto_renewing: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "4")]
    pub trial_until_timestamp: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "5")]
    pub signed_purchase_data: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub signature: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct LibraryUpdate {
    #[prost(int32, optional, tag = "1")]
    pub status: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub corpus: ::core::option::Option<i32>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub server_token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, repeated, tag = "4")]
    pub mutation: ::prost::alloc::vec::Vec<LibraryMutation>,
    #[prost(bool, optional, tag = "5")]
    pub has_more: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "6")]
    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AndroidAppNotificationData {
    #[prost(int32, optional, tag = "1")]
    pub version_code: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub asset_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct InAppNotificationData {
    #[prost(string, optional, tag = "1")]
    pub checkout_order_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub in_app_notification_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LibraryDirtyData {
    #[prost(int32, optional, tag = "1")]
    pub backend: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Notification {
    #[prost(int32, optional, tag = "1")]
    pub notification_type: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "3")]
    pub timestamp: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "4")]
    pub doc_id: ::core::option::Option<DocId>,
    #[prost(string, optional, tag = "5")]
    pub doc_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub user_email: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "7")]
    pub app_data: ::core::option::Option<AndroidAppNotificationData>,
    #[prost(message, optional, tag = "8")]
    pub app_delivery_data: ::core::option::Option<AndroidAppDeliveryData>,
    #[prost(message, optional, tag = "9")]
    pub purchase_removal_data: ::core::option::Option<PurchaseRemovalData>,
    #[prost(message, optional, tag = "10")]
    pub user_notification_data: ::core::option::Option<UserNotificationData>,
    #[prost(message, optional, tag = "11")]
    pub in_app_notification_data: ::core::option::Option<InAppNotificationData>,
    #[prost(message, optional, tag = "12")]
    pub purchase_declined_data: ::core::option::Option<PurchaseDeclinedData>,
    #[prost(string, optional, tag = "13")]
    pub notification_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "14")]
    pub library_update: ::core::option::Option<LibraryUpdate>,
    #[prost(message, optional, tag = "15")]
    pub library_dirty_data: ::core::option::Option<LibraryDirtyData>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PurchaseDeclinedData {
    #[prost(int32, optional, tag = "1")]
    pub reason: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "2")]
    pub show_notification: ::core::option::Option<bool>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PurchaseRemovalData {
    #[prost(bool, optional, tag = "1")]
    pub malicious: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UserNotificationData {
    #[prost(string, optional, tag = "1")]
    pub notification_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub notification_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub ticker_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub dialog_title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub dialog_text: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AggregateRating {
    #[prost(int32, optional, tag = "1", default = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(float, optional, tag = "2")]
    pub star_rating: ::core::option::Option<f32>,
    #[prost(uint64, optional, tag = "3")]
    pub ratings_count: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "4")]
    pub one_star_ratings: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "5")]
    pub two_star_ratings: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "6")]
    pub three_star_ratings: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "7")]
    pub four_star_ratings: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "8")]
    pub five_star_ratings: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "9")]
    pub thumbs_up_count: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "10")]
    pub thumbs_down_count: ::core::option::Option<u64>,
    #[prost(uint64, optional, tag = "11")]
    pub comment_count: ::core::option::Option<u64>,
    #[prost(double, optional, tag = "12")]
    pub bayesian_mean_rating: ::core::option::Option<f64>,
    #[prost(message, repeated, tag = "13")]
    pub tip: ::prost::alloc::vec::Vec<Tip>,
    #[prost(string, optional, tag = "17")]
    pub rating_label: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "18")]
    pub rating_count_label_abbreviated: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "19")]
    pub rating_count_label: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Tip {
    #[prost(string, optional, tag = "1")]
    pub tip_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "3")]
    pub polarity: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "4")]
    pub review_count: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "5")]
    pub language: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "6")]
    pub snippet_review_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ReviewTip {
    #[prost(string, optional, tag = "1")]
    pub tip_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "3")]
    pub polarity: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "4")]
    pub review_count: ::core::option::Option<i64>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AcceptTosResponse {}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CarrierBillingConfig {
    #[prost(string, optional, tag = "1")]
    pub id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "3")]
    pub api_version: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "4")]
    pub provisioning_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub credentials_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "6")]
    pub tos_required: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "7")]
    pub per_transaction_credentials_required: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "8")]
    pub send_subscriber_id_with_carrier_billing_requests: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BillingConfig {
    #[prost(message, optional, tag = "1")]
    pub carrier_billing_config: ::core::option::Option<CarrierBillingConfig>,
    #[prost(int32, optional, tag = "2")]
    pub max_iab_api_version: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CorpusMetadata {
    #[prost(int32, optional, tag = "1")]
    pub backend: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub landing_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub library_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub recs_widget_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub shop_name: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Experiments {
    #[prost(string, repeated, tag = "1")]
    pub experiment_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SelfUpdateConfig {
    #[prost(int32, optional, tag = "1")]
    pub latest_client_version_code: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct TocResponse {
    #[prost(message, repeated, tag = "1")]
    pub corpus: ::prost::alloc::vec::Vec<CorpusMetadata>,
    #[prost(int32, optional, tag = "2")]
    pub tos_version_deprecated: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "3")]
    pub tos_content: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub home_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub experiments: ::core::option::Option<Experiments>,
    #[prost(string, optional, tag = "6")]
    pub tos_checkbox_text_marketing_emails: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub tos_token: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "8")]
    pub user_settings: ::core::option::Option<UserSettings>,
    #[prost(string, optional, tag = "9")]
    pub icon_override_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "10")]
    pub self_update_config: ::core::option::Option<SelfUpdateConfig>,
    #[prost(bool, optional, tag = "11")]
    pub requires_upload_device_config: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "12")]
    pub billing_config: ::core::option::Option<BillingConfig>,
    #[prost(string, optional, tag = "13")]
    pub recs_widget_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "15")]
    pub social_home_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "16")]
    pub age_verification_required: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "17")]
    pub g_plus_signup_enabled: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "18")]
    pub redeem_enabled: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "19")]
    pub help_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "20")]
    pub theme_id: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "21")]
    pub entertainment_home_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "22")]
    pub cookie: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UserSettings {
    #[prost(bool, optional, tag = "1")]
    pub tos_checkbox_marketing_emails_opted_in: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "2")]
    pub privacy_setting: ::core::option::Option<PrivacySetting>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PrivacySetting {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub current_status: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "3")]
    pub enabled_by_default: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Payload {
    #[prost(message, optional, tag = "1")]
    pub list_response: ::core::option::Option<ListResponse>,
    #[prost(message, optional, tag = "2")]
    pub details_response: ::core::option::Option<DetailsResponse>,
    #[prost(message, optional, tag = "3")]
    pub review_response: ::core::option::Option<ReviewResponse>,
    #[prost(message, optional, tag = "4")]
    pub buy_response: ::core::option::Option<BuyResponse>,
    #[prost(message, optional, tag = "5")]
    pub search_response: ::core::option::Option<SearchResponse>,
    #[prost(message, optional, tag = "6")]
    pub toc_response: ::core::option::Option<TocResponse>,
    #[prost(message, optional, tag = "7")]
    pub browse_response: ::core::option::Option<BrowseResponse>,
    #[prost(message, optional, tag = "8")]
    pub purchase_status_response: ::core::option::Option<PurchaseStatusResponse>,
    #[prost(string, optional, tag = "10")]
    pub log_response: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "13")]
    pub flag_content_response: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "19")]
    pub bulk_details_response: ::core::option::Option<BulkDetailsResponse>,
    #[prost(message, optional, tag = "21")]
    pub delivery_response: ::core::option::Option<DeliveryResponse>,
    #[prost(message, optional, tag = "22")]
    pub accept_tos_response: ::core::option::Option<AcceptTosResponse>,
    #[prost(message, optional, tag = "24")]
    pub check_promo_offer_response: ::core::option::Option<CheckPromoOfferResponse>,
    #[prost(message, optional, tag = "25")]
    pub instrument_setup_info_response: ::core::option::Option<InstrumentSetupInfoResponse>,
    #[prost(message, optional, tag = "26")]
    pub android_checkin_response: ::core::option::Option<AndroidCheckinResponse>,
    #[prost(message, optional, tag = "28")]
    pub upload_device_config_response: ::core::option::Option<UploadDeviceConfigResponse>,
    #[prost(message, optional, tag = "40")]
    pub search_suggest_response: ::core::option::Option<SearchSuggestResponse>,
    #[prost(message, optional, tag = "30")]
    pub consume_purchase_response: ::core::option::Option<ConsumePurchaseResponse>,
    #[prost(message, optional, tag = "31")]
    pub billing_profile_response: ::core::option::Option<BillingProfileResponse>,
    #[prost(message, optional, tag = "34")]
    pub debug_settings_response: ::core::option::Option<DebugSettingsResponse>,
    #[prost(message, optional, tag = "35")]
    pub check_iab_promo_response: ::core::option::Option<CheckIabPromoResponse>,
    #[prost(message, optional, tag = "36")]
    pub user_activity_settings_response: ::core::option::Option<UserActivitySettingsResponse>,
    #[prost(message, optional, tag = "37")]
    pub record_user_activity_response: ::core::option::Option<RecordUserActivityResponse>,
    #[prost(message, optional, tag = "38")]
    pub redeem_code_response: ::core::option::Option<RedeemCodeResponse>,
    #[prost(message, optional, tag = "39")]
    pub self_update_response: ::core::option::Option<SelfUpdateResponse>,
    #[prost(message, optional, tag = "41")]
    pub get_initial_instrument_flow_state_response:
        ::core::option::Option<GetInitialInstrumentFlowStateResponse>,
    #[prost(message, optional, tag = "42")]
    pub create_instrument_response: ::core::option::Option<CreateInstrumentResponse>,
    #[prost(message, optional, tag = "43")]
    pub challenge_response: ::core::option::Option<ChallengeResponse>,
    #[prost(message, optional, tag = "44")]
    pub backup_device_choices_response: ::core::option::Option<BackDeviceChoicesResponse>,
    #[prost(message, optional, tag = "45")]
    pub backup_document_choices_response: ::core::option::Option<BackupDocumentChoicesResponse>,
    #[prost(message, optional, tag = "46")]
    pub early_update_response: ::core::option::Option<EarlyUpdateResponse>,
    #[prost(message, optional, tag = "47")]
    pub preloads_response: ::core::option::Option<PreloadsResponse>,
    #[prost(message, optional, tag = "48")]
    pub my_accounts_response: ::core::option::Option<MyAccountsResponse>,
    #[prost(message, optional, tag = "49")]
    pub content_filter_response: ::core::option::Option<ContentFilterResponse>,
    #[prost(message, optional, tag = "50")]
    pub experiments_response: ::core::option::Option<ExperimentsResponse>,
    #[prost(message, optional, tag = "51")]
    pub survey_response: ::core::option::Option<SurveyResponse>,
    #[prost(message, optional, tag = "52")]
    pub ping_response: ::core::option::Option<PingResponse>,
    #[prost(message, optional, tag = "53")]
    pub update_user_setting_response: ::core::option::Option<UpdateUserSettingResponse>,
    #[prost(message, optional, tag = "54")]
    pub get_user_settings_response: ::core::option::Option<GetUserSettingsResponse>,
    #[prost(message, optional, tag = "56")]
    pub get_sharing_settings_response: ::core::option::Option<GetSharingSettingsResponse>,
    #[prost(message, optional, tag = "57")]
    pub update_sharing_settings_response: ::core::option::Option<UpdateSharingSettingsResponse>,
    #[prost(message, optional, tag = "58")]
    pub review_snippets_response: ::core::option::Option<ReviewSnippetsResponse>,
    #[prost(message, optional, tag = "59")]
    pub document_sharing_state_response: ::core::option::Option<DocumentSharingStateResponse>,
    #[prost(message, optional, tag = "70")]
    pub module_delivery_response: ::core::option::Option<ModuleDeliveryResponse>,
    #[prost(message, optional, tag = "80")]
    pub testing_program_response: ::core::option::Option<TestingProgramResponse>,
    #[prost(message, optional, tag = "129")]
    pub review_summary_response: ::core::option::Option<ReviewResponse>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CheckIabPromoResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UserActivitySettingsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RecordUserActivityResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RedeemCodeResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SelfUpdateResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetInitialInstrumentFlowStateResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CreateInstrumentResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ChallengeResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BackDeviceChoicesResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BackupDocumentChoicesResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EarlyUpdateResponse {}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PreloadsResponse {
    #[prost(message, optional, tag = "1")]
    pub config_preload: ::core::option::Option<preloads_response::Preload>,
    #[prost(message, repeated, tag = "2")]
    pub app_preload: ::prost::alloc::vec::Vec<preloads_response::Preload>,
}
/// Nested message and enum types in `PreloadsResponse`.
pub mod preloads_response {
    #[derive(Clone, PartialEq, Eq, ::prost::Message)]
    pub struct Preload {
        #[prost(message, optional, tag = "1")]
        pub doc_id: ::core::option::Option<super::DocId>,
        #[prost(int32, optional, tag = "2")]
        pub version_code: ::core::option::Option<i32>,
        #[prost(string, optional, tag = "3")]
        pub title: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(message, optional, tag = "4")]
        pub icon: ::core::option::Option<super::Image>,
        #[prost(string, optional, tag = "5")]
        pub delivery_token: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(int32, optional, tag = "6")]
        pub install_location: ::core::option::Option<i32>,
        #[prost(int64, optional, tag = "7")]
        pub size: ::core::option::Option<i64>,
    }
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MyAccountsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ContentFilterResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ExperimentsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SurveyResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PingResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UpdateUserSettingResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetUserSettingsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetSharingSettingsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UpdateSharingSettingsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ReviewSnippetsResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DocumentSharingStateResponse {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ModuleDeliveryResponse {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PreFetch {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, boxed, tag = "2")]
    pub response: ::core::option::Option<::prost::alloc::boxed::Box<ResponseWrapper>>,
    #[prost(string, optional, tag = "3")]
    pub etag: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "4")]
    pub ttl: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "5")]
    pub soft_ttl: ::core::option::Option<i64>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ServerMetadata {
    #[prost(int64, optional, tag = "1")]
    pub latency_millis: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Targets {
    #[prost(int64, repeated, packed = "false", tag = "1")]
    pub target_id: ::prost::alloc::vec::Vec<i64>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub signature: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ServerCookie {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ServerCookies {
    #[prost(message, repeated, tag = "1")]
    pub server_cookie: ::prost::alloc::vec::Vec<ServerCookie>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResponseWrapper {
    #[prost(message, optional, tag = "1")]
    pub payload: ::core::option::Option<Payload>,
    #[prost(message, optional, tag = "2")]
    pub commands: ::core::option::Option<ServerCommands>,
    #[prost(message, optional, boxed, tag = "3")]
    pub pre_fetch: ::core::option::Option<::prost::alloc::boxed::Box<PreFetch>>,
    #[prost(message, repeated, tag = "4")]
    pub notification: ::prost::alloc::vec::Vec<Notification>,
    #[prost(message, optional, tag = "5")]
    pub server_metadata: ::core::option::Option<ServerMetadata>,
    #[prost(message, optional, tag = "6")]
    pub targets: ::core::option::Option<Targets>,
    #[prost(message, optional, tag = "7")]
    pub server_cookies: ::core::option::Option<ServerCookies>,
    #[prost(bytes = "vec", optional, tag = "9")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[allow(dead_code)]
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ResponseWrapperApi {
    #[prost(message, optional, tag = "1")]
    pub payload: ::core::option::Option<PayloadApi>,
}
#[allow(dead_code)]
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PayloadApi {
    #[prost(message, optional, tag = "5")]
    pub user_profile_response: ::core::option::Option<UserProfileResponse>,
}
#[allow(dead_code)]
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct UserProfileResponse {
    #[prost(message, optional, tag = "1")]
    pub user_profile: ::core::option::Option<UserProfile>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ServerCommands {
    #[prost(bool, optional, tag = "1")]
    pub clear_cache: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "2")]
    pub display_error_message: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub log_error_stacktrace: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct GetReviewsResponse {
    #[prost(message, repeated, tag = "1")]
    pub review: ::prost::alloc::vec::Vec<Review>,
    #[prost(int64, optional, tag = "2")]
    pub matching_count: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct Review {
    #[prost(string, optional, tag = "1")]
    pub author_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub source: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub version: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "5")]
    pub timestamp: ::core::option::Option<i64>,
    #[prost(int32, optional, tag = "6")]
    pub star_rating: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "7")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "8")]
    pub comment: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "9")]
    pub comment_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "19")]
    pub device_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "29")]
    pub reply_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "30")]
    pub reply_time_stamp: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "31")]
    pub author: ::core::option::Option<ReviewAuthor>,
    #[prost(message, optional, tag = "33")]
    pub user_profile: ::core::option::Option<UserProfile>,
    #[prost(message, optional, tag = "34")]
    pub sentiment: ::core::option::Option<Image>,
    #[prost(int32, optional, tag = "35")]
    pub helpful_count: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "38")]
    pub thumbs_up_count: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct CriticReviewsResponse {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "2")]
    pub image: ::core::option::Option<Image>,
    #[prost(uint32, optional, tag = "3")]
    pub total_num_reviews: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "4")]
    pub percent_favorable: ::core::option::Option<u32>,
    #[prost(string, optional, tag = "5")]
    pub source_text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "6")]
    pub source: ::core::option::Option<Link>,
    #[prost(message, repeated, tag = "7")]
    pub review: ::prost::alloc::vec::Vec<Review>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ReviewAuthor {
    #[prost(string, optional, tag = "2")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub avatar: ::core::option::Option<Image>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct UserProfile {
    #[prost(string, optional, tag = "1")]
    pub profile_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub person_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "3")]
    pub profile_type: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "4")]
    pub person_type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "5")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "10")]
    pub image: ::prost::alloc::vec::Vec<Image>,
    #[prost(string, optional, tag = "19")]
    pub profile_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "22")]
    pub profile_description: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct ReviewResponse {
    #[prost(message, optional, tag = "1")]
    pub user_reviews_response: ::core::option::Option<GetReviewsResponse>,
    #[prost(string, optional, tag = "2")]
    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub user_review: ::core::option::Option<Review>,
    #[prost(string, optional, tag = "4")]
    pub suggestions_list_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub critic_reviews_response: ::core::option::Option<CriticReviewsResponse>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RelatedSearch {
    #[prost(string, optional, tag = "1")]
    pub search_url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub header: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "3")]
    pub backend_id: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "4", default = "1")]
    pub doc_type: ::core::option::Option<i32>,
    #[prost(bool, optional, tag = "5")]
    pub current: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SearchResponse {
    #[prost(string, optional, tag = "1")]
    pub original_query: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub suggested_query: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "3")]
    pub aggregate_query: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "4")]
    pub bucket: ::prost::alloc::vec::Vec<Bucket>,
    #[prost(message, repeated, tag = "5")]
    pub item: ::prost::alloc::vec::Vec<Item>,
    #[prost(message, repeated, tag = "6")]
    pub related_search: ::prost::alloc::vec::Vec<RelatedSearch>,
    #[prost(bytes = "vec", optional, tag = "7")]
    pub server_logs_cookie: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bool, optional, tag = "8")]
    pub full_page_replaced: ::core::option::Option<bool>,
    #[prost(bool, optional, tag = "9")]
    pub contains_snow: ::core::option::Option<bool>,
    #[prost(string, optional, tag = "10")]
    pub next_page_url: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct SearchSuggestResponse {
    #[prost(message, repeated, tag = "1")]
    pub entry: ::prost::alloc::vec::Vec<SearchSuggestEntry>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SearchSuggestEntry {
    #[prost(int32, optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub suggested_query: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "5")]
    pub image_container: ::core::option::Option<search_suggest_entry::ImageContainer>,
    #[prost(string, optional, tag = "6")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "8")]
    pub package_name_container: ::core::option::Option<search_suggest_entry::PackageNameContainer>,
}
/// Nested message and enum types in `SearchSuggestEntry`.
pub mod search_suggest_entry {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct ImageContainer {
        #[prost(string, optional, tag = "5")]
        pub image_url: ::core::option::Option<::prost::alloc::string::String>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PackageNameContainer {
        #[prost(string, optional, tag = "1")]
        pub package_name: ::core::option::Option<::prost::alloc::string::String>,
    }
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TestingProgramResponse {
    #[prost(message, optional, tag = "2")]
    pub result: ::core::option::Option<TestingProgramResult>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TestingProgramResult {
    #[prost(message, optional, tag = "4")]
    pub details: ::core::option::Option<TestingProgramDetails>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TestingProgramDetails {
    #[prost(bool, optional, tag = "2")]
    pub subscribed: ::core::option::Option<bool>,
    #[prost(int64, optional, tag = "3")]
    pub id: ::core::option::Option<i64>,
    #[prost(bool, optional, tag = "4")]
    pub unsubscribed: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct LogRequest {
    #[prost(int64, optional, tag = "1")]
    pub timestamp: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "2")]
    pub download_confirmation_query: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TestingProgramRequest {
    #[prost(string, optional, tag = "1")]
    pub package_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "2")]
    pub subscribe: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct UploadDeviceConfigRequest {
    #[prost(message, optional, tag = "1")]
    pub device_configuration: ::core::option::Option<DeviceConfigurationProto>,
    #[prost(string, optional, tag = "2")]
    pub manufacturer: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub gcm_registration_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UploadDeviceConfigResponse {
    #[prost(string, optional, tag = "1")]
    pub upload_device_config_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AndroidCheckinRequest {
    #[prost(string, optional, tag = "1")]
    pub imei: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "2", default = "0")]
    pub id: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "3")]
    pub digest: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "4")]
    pub checkin: ::core::option::Option<AndroidCheckinProto>,
    #[prost(string, optional, tag = "5")]
    pub desired_build: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub locale: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "7")]
    pub logging_id: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "8")]
    pub market_checkin: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "9")]
    pub mac_addr: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "10")]
    pub meid: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "11")]
    pub account_cookie: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub time_zone: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(fixed64, optional, tag = "13")]
    pub security_token: ::core::option::Option<u64>,
    #[prost(int32, optional, tag = "14")]
    pub version: ::core::option::Option<i32>,
    #[prost(string, repeated, tag = "15")]
    pub ota_cert: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "16")]
    pub serial_number: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "17")]
    pub esn: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "18")]
    pub device_configuration: ::core::option::Option<DeviceConfigurationProto>,
    #[prost(string, repeated, tag = "19")]
    pub mac_addr_type: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "20")]
    pub fragment: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "21")]
    pub user_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "22")]
    pub user_serial_number: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AndroidCheckinResponse {
    #[prost(bool, optional, tag = "1")]
    pub stats_ok: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "2")]
    pub intent: ::prost::alloc::vec::Vec<AndroidIntentProto>,
    #[prost(int64, optional, tag = "3")]
    pub time_msec: ::core::option::Option<i64>,
    #[prost(string, optional, tag = "4")]
    pub digest: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "5")]
    pub setting: ::prost::alloc::vec::Vec<GservicesSetting>,
    #[prost(bool, optional, tag = "6")]
    pub market_ok: ::core::option::Option<bool>,
    #[prost(fixed64, optional, tag = "7")]
    pub android_id: ::core::option::Option<u64>,
    #[prost(fixed64, optional, tag = "8")]
    pub security_token: ::core::option::Option<u64>,
    #[prost(bool, optional, tag = "9")]
    pub settings_diff: ::core::option::Option<bool>,
    #[prost(string, repeated, tag = "10")]
    pub delete_setting: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub device_checkin_consistency_token: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GservicesSetting {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub name: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub value: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AndroidBuildProto {
    #[prost(string, optional, tag = "1")]
    pub id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub product: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub carrier: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub radio: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub bootloader: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub client: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "7")]
    pub timestamp: ::core::option::Option<i64>,
    #[prost(int32, optional, tag = "8")]
    pub google_services: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "9")]
    pub device: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "10")]
    pub sdk_version: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "11")]
    pub model: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub manufacturer: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "13")]
    pub build_product: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bool, optional, tag = "14")]
    pub ota_installed: ::core::option::Option<bool>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AndroidCheckinProto {
    #[prost(message, optional, tag = "1")]
    pub build: ::core::option::Option<AndroidBuildProto>,
    #[prost(int64, optional, tag = "2")]
    pub last_checkin_msec: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "3")]
    pub event: ::prost::alloc::vec::Vec<AndroidEventProto>,
    #[prost(message, repeated, tag = "4")]
    pub stat: ::prost::alloc::vec::Vec<AndroidStatisticProto>,
    #[prost(string, repeated, tag = "5")]
    pub requested_group: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "6")]
    pub cell_operator: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "7")]
    pub sim_operator: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "8")]
    pub roaming: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "9")]
    pub user_number: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AndroidEventProto {
    #[prost(string, optional, tag = "1")]
    pub tag: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub value: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int64, optional, tag = "3")]
    pub time_msec: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AndroidIntentProto {
    #[prost(string, optional, tag = "1")]
    pub action: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub data_uri: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub mime_type: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub java_class: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(group, repeated, tag = "5")]
    pub extra: ::prost::alloc::vec::Vec<android_intent_proto::Extra>,
}
/// Nested message and enum types in `AndroidIntentProto`.
pub mod android_intent_proto {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Extra {
        #[prost(string, optional, tag = "6")]
        pub name: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "7")]
        pub value: ::core::option::Option<::prost::alloc::string::String>,
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AndroidStatisticProto {
    #[prost(string, optional, tag = "1")]
    pub tag: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2")]
    pub count: ::core::option::Option<i32>,
    #[prost(float, optional, tag = "3")]
    pub sum: ::core::option::Option<f32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ClientLibraryState {
    #[prost(int32, optional, tag = "1")]
    pub corpus: ::core::option::Option<i32>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub server_token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(int64, optional, tag = "3")]
    pub hash_code_sum: ::core::option::Option<i64>,
    #[prost(int32, optional, tag = "4")]
    pub library_size: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "5")]
    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AndroidDataUsageProto {
    #[prost(int32, optional, tag = "1")]
    pub version: ::core::option::Option<i32>,
    #[prost(int64, optional, tag = "2")]
    pub current_report_msec: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "3")]
    pub key_to_package_name_mapping: ::prost::alloc::vec::Vec<KeyToPackageNameMapping>,
    #[prost(message, repeated, tag = "4")]
    pub payload_level_app_stat: ::prost::alloc::vec::Vec<PayloadLevelAppStat>,
    #[prost(message, repeated, tag = "5")]
    pub ip_layer_network_stat: ::prost::alloc::vec::Vec<IpLayerNetworkStat>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AndroidUsageStatsReport {
    #[prost(int64, optional, tag = "1")]
    pub android_id: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub logging_id: ::core::option::Option<i64>,
    #[prost(message, optional, tag = "3")]
    pub usage_stats: ::core::option::Option<UsageStatsExtensionProto>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct AppBucket {
    #[prost(int64, optional, tag = "1")]
    pub bucket_start_msec: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub bucket_duration_msec: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "3")]
    pub stat_counters: ::prost::alloc::vec::Vec<StatCounters>,
    #[prost(int64, optional, tag = "4")]
    pub operation_count: ::core::option::Option<i64>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CounterData {
    #[prost(int64, optional, tag = "1")]
    pub bytes: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub packets: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct IpLayerAppStat {
    #[prost(int32, optional, tag = "1")]
    pub package_key: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub application_tag: ::core::option::Option<i32>,
    #[prost(message, repeated, tag = "3")]
    pub ip_layer_app_bucket: ::prost::alloc::vec::Vec<AppBucket>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct IpLayerNetworkBucket {
    #[prost(int64, optional, tag = "1")]
    pub bucket_start_msec: ::core::option::Option<i64>,
    #[prost(int64, optional, tag = "2")]
    pub bucket_duration_msec: ::core::option::Option<i64>,
    #[prost(message, repeated, tag = "3")]
    pub stat_counters: ::prost::alloc::vec::Vec<StatCounters>,
    #[prost(int64, optional, tag = "4")]
    pub network_active_duration: ::core::option::Option<i64>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct IpLayerNetworkStat {
    #[prost(string, optional, tag = "1")]
    pub network_details: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(message, repeated, tag = "3")]
    pub ip_layer_network_bucket: ::prost::alloc::vec::Vec<IpLayerNetworkBucket>,
    #[prost(message, repeated, tag = "4")]
    pub ip_layer_app_stat: ::prost::alloc::vec::Vec<IpLayerAppStat>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct KeyToPackageNameMapping {
    #[prost(int32, optional, tag = "1")]
    pub package_key: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "2")]
    pub uid_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "3")]
    pub shared_package: ::prost::alloc::vec::Vec<PackageInfo>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PackageInfo {
    #[prost(string, optional, tag = "1")]
    pub pkg_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(int32, optional, tag = "2")]
    pub version_code: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct PayloadLevelAppStat {
    #[prost(int32, optional, tag = "1")]
    pub package_key: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub application_tag: ::core::option::Option<i32>,
    #[prost(message, repeated, tag = "3")]
    pub payload_level_app_bucket: ::prost::alloc::vec::Vec<AppBucket>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StatCounters {
    #[prost(int32, optional, tag = "1")]
    pub network_proto: ::core::option::Option<i32>,
    #[prost(int32, optional, tag = "2")]
    pub direction: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "3")]
    pub counter_data: ::core::option::Option<CounterData>,
    #[prost(int32, optional, tag = "4")]
    pub fg_bg: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, Eq, ::prost::Message)]
pub struct UsageStatsExtensionProto {
    #[prost(message, optional, tag = "1")]
    pub data_usage: ::core::option::Option<AndroidDataUsageProto>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ModifyLibraryRequest {
    #[prost(string, optional, tag = "1")]
    pub library_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "2")]
    pub add_package_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "3")]
    pub remove_package_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
