// This file is @generated by prost-build.
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DeviceName {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub ephemeral_public: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub synthetic_iv: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub ciphertext: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
/// An opaque address sent by the server when clients first open a provisioning
/// WebSocket
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ProvisioningAddress {
    /// The opaque provisioning address for the active provisioning WebSocket
    /// session; clients should not attempt to interpret or modify the contents
    /// of the address string
    #[prost(string, optional, tag = "1")]
    pub address: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ProvisionEnvelope {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub public_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// Encrypted ProvisionMessage
    #[prost(bytes = "vec", optional, tag = "2")]
    pub body: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ProvisionMessage {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub aci_identity_key_public: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub aci_identity_key_private: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "11")]
    pub pni_identity_key_public: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "12")]
    pub pni_identity_key_private: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "8")]
    pub aci: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "10")]
    pub pni: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "3")]
    pub number: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "4")]
    pub provisioning_code: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "5")]
    pub user_agent: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "6")]
    pub profile_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bool, optional, tag = "7")]
    pub read_receipts: ::core::option::Option<bool>,
    #[prost(uint32, optional, tag = "9")]
    pub provisioning_version: ::core::option::Option<u32>,
    /// Deprecated, but required by linked devices
    #[prost(bytes = "vec", optional, tag = "13")]
    pub master_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// 32 bytes
    #[prost(bytes = "vec", optional, tag = "14")]
    pub ephemeral_backup_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "15")]
    pub account_entropy_pool: ::core::option::Option<::prost::alloc::string::String>,
    /// 32-bytes
    #[prost(bytes = "vec", optional, tag = "16")]
    pub media_root_backup_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// 16-byte UUID
    #[prost(bytes = "vec", optional, tag = "17")]
    pub aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// 16-byte UUID
    #[prost(bytes = "vec", optional, tag = "18")]
    pub pni_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ProvisioningVersion {
    Initial = 0,
    TabletSupport = 1,
}
impl ProvisioningVersion {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Initial => "INITIAL",
            Self::TabletSupport => "TABLET_SUPPORT",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "INITIAL" => Some(Self::Initial),
            "TABLET_SUPPORT" => Some(Self::TabletSupport),
            _ => None,
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Envelope {
    #[prost(enumeration = "envelope::Type", optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(string, optional, tag = "11")]
    pub source_service_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(uint32, optional, tag = "7")]
    pub source_device: ::core::option::Option<u32>,
    #[prost(string, optional, tag = "13")]
    pub destination_service_id: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(uint64, optional, tag = "5")]
    pub timestamp: ::core::option::Option<u64>,
    /// Contains an encrypted Content
    #[prost(bytes = "vec", optional, tag = "8")]
    pub content: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "9")]
    pub server_guid: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(uint64, optional, tag = "10")]
    pub server_timestamp: ::core::option::Option<u64>,
    /// indicates that the message should not be persisted if the recipient is offline
    #[prost(bool, optional, tag = "12")]
    pub ephemeral: ::core::option::Option<bool>,
    /// indicates that the content is considered timely by the sender; defaults to true so senders have to opt-out to say something isn't time critical
    #[prost(bool, optional, tag = "14", default = "true")]
    pub urgent: ::core::option::Option<bool>,
    /// for number-change synchronization messages, provides the new server-assigned phone number identifier associated with the changed number
    #[prost(string, optional, tag = "15")]
    pub updated_pni: ::core::option::Option<::prost::alloc::string::String>,
    /// indicates that the content is a story.
    #[prost(bool, optional, tag = "16")]
    pub story: ::core::option::Option<bool>,
    /// token sent when reporting spam
    #[prost(bytes = "vec", optional, tag = "17")]
    pub report_spam_token: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
    #[prost(bytes = "vec", optional, tag = "19")]
    pub source_service_id_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
    #[prost(bytes = "vec", optional, tag = "20")]
    pub destination_service_id_binary: ::core::option::Option<
        ::prost::alloc::vec::Vec<u8>,
    >,
    /// 16-byte UUID
    #[prost(bytes = "vec", optional, tag = "21")]
    pub server_guid_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// 16-byte UUID
    #[prost(bytes = "vec", optional, tag = "22")]
    pub updated_pni_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
/// Nested message and enum types in `Envelope`.
pub mod envelope {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Type {
        Unknown = 0,
        /// content => (version byte | SignalMessage{Content})
        Ciphertext = 1,
        /// content => (version byte | PreKeySignalMessage{Content})
        PrekeyBundle = 3,
        /// legacyMessage => \[\] AND content => \[\]
        ServerDeliveryReceipt = 5,
        /// legacyMessage => \[\] AND content => ((version byte | UnidentifiedSenderMessage) OR (version byte | Multi-Recipient Sealed Sender Format))
        UnidentifiedSender = 6,
        /// legacyMessage => \[\] AND content => (version byte | SenderKeyMessage)
        SenderkeyMessage = 7,
        /// legacyMessage => \[\] AND content => (marker byte | Content)
        PlaintextContent = 8,
    }
    impl Type {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unknown => "UNKNOWN",
                Self::Ciphertext => "CIPHERTEXT",
                Self::PrekeyBundle => "PREKEY_BUNDLE",
                Self::ServerDeliveryReceipt => "SERVER_DELIVERY_RECEIPT",
                Self::UnidentifiedSender => "UNIDENTIFIED_SENDER",
                Self::SenderkeyMessage => "SENDERKEY_MESSAGE",
                Self::PlaintextContent => "PLAINTEXT_CONTENT",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "UNKNOWN" => Some(Self::Unknown),
                "CIPHERTEXT" => Some(Self::Ciphertext),
                "PREKEY_BUNDLE" => Some(Self::PrekeyBundle),
                "SERVER_DELIVERY_RECEIPT" => Some(Self::ServerDeliveryReceipt),
                "UNIDENTIFIED_SENDER" => Some(Self::UnidentifiedSender),
                "SENDERKEY_MESSAGE" => Some(Self::SenderkeyMessage),
                "PLAINTEXT_CONTENT" => Some(Self::PlaintextContent),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Content {
    #[prost(message, optional, tag = "1")]
    pub data_message: ::core::option::Option<DataMessage>,
    #[prost(message, optional, tag = "2")]
    pub sync_message: ::core::option::Option<SyncMessage>,
    #[prost(message, optional, tag = "3")]
    pub call_message: ::core::option::Option<CallMessage>,
    #[prost(message, optional, tag = "4")]
    pub null_message: ::core::option::Option<NullMessage>,
    #[prost(message, optional, tag = "5")]
    pub receipt_message: ::core::option::Option<ReceiptMessage>,
    #[prost(message, optional, tag = "6")]
    pub typing_message: ::core::option::Option<TypingMessage>,
    #[prost(bytes = "vec", optional, tag = "7")]
    pub sender_key_distribution_message: ::core::option::Option<
        ::prost::alloc::vec::Vec<u8>,
    >,
    #[prost(bytes = "vec", optional, tag = "8")]
    pub decryption_error_message: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, optional, tag = "9")]
    pub story_message: ::core::option::Option<StoryMessage>,
    #[prost(message, optional, tag = "10")]
    pub pni_signature_message: ::core::option::Option<PniSignatureMessage>,
    #[prost(message, optional, tag = "11")]
    pub edit_message: ::core::option::Option<EditMessage>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CallMessage {
    #[prost(message, optional, tag = "1")]
    pub offer: ::core::option::Option<call_message::Offer>,
    #[prost(message, optional, tag = "2")]
    pub answer: ::core::option::Option<call_message::Answer>,
    #[prost(message, repeated, tag = "3")]
    pub ice_update: ::prost::alloc::vec::Vec<call_message::IceUpdate>,
    #[prost(message, optional, tag = "5")]
    pub busy: ::core::option::Option<call_message::Busy>,
    #[prost(message, optional, tag = "7")]
    pub hangup: ::core::option::Option<call_message::Hangup>,
    #[prost(uint32, optional, tag = "9")]
    pub destination_device_id: ::core::option::Option<u32>,
    #[prost(message, optional, tag = "10")]
    pub opaque: ::core::option::Option<call_message::Opaque>,
}
/// Nested message and enum types in `CallMessage`.
pub mod call_message {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Offer {
        #[prost(uint64, optional, tag = "1")]
        pub id: ::core::option::Option<u64>,
        #[prost(enumeration = "offer::Type", optional, tag = "3")]
        pub r#type: ::core::option::Option<i32>,
        #[prost(bytes = "vec", optional, tag = "4")]
        pub opaque: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    /// Nested message and enum types in `Offer`.
    pub mod offer {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            OfferAudioCall = 0,
            OfferVideoCall = 1,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::OfferAudioCall => "OFFER_AUDIO_CALL",
                    Self::OfferVideoCall => "OFFER_VIDEO_CALL",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "OFFER_AUDIO_CALL" => Some(Self::OfferAudioCall),
                    "OFFER_VIDEO_CALL" => Some(Self::OfferVideoCall),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Answer {
        #[prost(uint64, optional, tag = "1")]
        pub id: ::core::option::Option<u64>,
        #[prost(bytes = "vec", optional, tag = "3")]
        pub opaque: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct IceUpdate {
        #[prost(uint64, optional, tag = "1")]
        pub id: ::core::option::Option<u64>,
        #[prost(bytes = "vec", optional, tag = "5")]
        pub opaque: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Busy {
        #[prost(uint64, optional, tag = "1")]
        pub id: ::core::option::Option<u64>,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Hangup {
        #[prost(uint64, optional, tag = "1")]
        pub id: ::core::option::Option<u64>,
        #[prost(enumeration = "hangup::Type", optional, tag = "2")]
        pub r#type: ::core::option::Option<i32>,
        #[prost(uint32, optional, tag = "3")]
        pub device_id: ::core::option::Option<u32>,
    }
    /// Nested message and enum types in `Hangup`.
    pub mod hangup {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            HangupNormal = 0,
            HangupAccepted = 1,
            HangupDeclined = 2,
            HangupBusy = 3,
            HangupNeedPermission = 4,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::HangupNormal => "HANGUP_NORMAL",
                    Self::HangupAccepted => "HANGUP_ACCEPTED",
                    Self::HangupDeclined => "HANGUP_DECLINED",
                    Self::HangupBusy => "HANGUP_BUSY",
                    Self::HangupNeedPermission => "HANGUP_NEED_PERMISSION",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "HANGUP_NORMAL" => Some(Self::HangupNormal),
                    "HANGUP_ACCEPTED" => Some(Self::HangupAccepted),
                    "HANGUP_DECLINED" => Some(Self::HangupDeclined),
                    "HANGUP_BUSY" => Some(Self::HangupBusy),
                    "HANGUP_NEED_PERMISSION" => Some(Self::HangupNeedPermission),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Opaque {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub data: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        /// If missing, treat as DROPPABLE.
        #[prost(enumeration = "opaque::Urgency", optional, tag = "2")]
        pub urgency: ::core::option::Option<i32>,
    }
    /// Nested message and enum types in `Opaque`.
    pub mod opaque {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Urgency {
            Droppable = 0,
            HandleImmediately = 1,
        }
        impl Urgency {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Droppable => "DROPPABLE",
                    Self::HandleImmediately => "HANDLE_IMMEDIATELY",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "DROPPABLE" => Some(Self::Droppable),
                    "HANDLE_IMMEDIATELY" => Some(Self::HandleImmediately),
                    _ => None,
                }
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DataMessage {
    #[prost(string, optional, tag = "1")]
    pub body: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, repeated, tag = "2")]
    pub attachments: ::prost::alloc::vec::Vec<AttachmentPointer>,
    #[prost(message, optional, tag = "15")]
    pub group_v2: ::core::option::Option<GroupContextV2>,
    #[prost(uint32, optional, tag = "4")]
    pub flags: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "5")]
    pub expire_timer: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "23")]
    pub expire_timer_version: ::core::option::Option<u32>,
    #[prost(bytes = "vec", optional, tag = "6")]
    pub profile_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(uint64, optional, tag = "7")]
    pub timestamp: ::core::option::Option<u64>,
    #[prost(message, optional, tag = "8")]
    pub quote: ::core::option::Option<data_message::Quote>,
    #[prost(message, repeated, tag = "9")]
    pub contact: ::prost::alloc::vec::Vec<data_message::Contact>,
    #[prost(message, repeated, tag = "10")]
    pub preview: ::prost::alloc::vec::Vec<Preview>,
    #[prost(message, optional, tag = "11")]
    pub sticker: ::core::option::Option<data_message::Sticker>,
    #[prost(uint32, optional, tag = "12")]
    pub required_protocol_version: ::core::option::Option<u32>,
    #[prost(bool, optional, tag = "14")]
    pub is_view_once: ::core::option::Option<bool>,
    #[prost(message, optional, tag = "16")]
    pub reaction: ::core::option::Option<data_message::Reaction>,
    #[prost(message, optional, tag = "17")]
    pub delete: ::core::option::Option<data_message::Delete>,
    #[prost(message, repeated, tag = "18")]
    pub body_ranges: ::prost::alloc::vec::Vec<BodyRange>,
    #[prost(message, optional, tag = "19")]
    pub group_call_update: ::core::option::Option<data_message::GroupCallUpdate>,
    #[prost(message, optional, tag = "20")]
    pub payment: ::core::option::Option<data_message::Payment>,
    #[prost(message, optional, tag = "21")]
    pub story_context: ::core::option::Option<data_message::StoryContext>,
    #[prost(message, optional, tag = "22")]
    pub gift_badge: ::core::option::Option<data_message::GiftBadge>,
    #[prost(message, optional, tag = "24")]
    pub poll_create: ::core::option::Option<data_message::PollCreate>,
    #[prost(message, optional, tag = "25")]
    pub poll_terminate: ::core::option::Option<data_message::PollTerminate>,
    #[prost(message, optional, tag = "26")]
    pub poll_vote: ::core::option::Option<data_message::PollVote>,
    #[prost(message, optional, tag = "27")]
    pub pin_message: ::core::option::Option<data_message::PinMessage>,
    #[prost(message, optional, tag = "28")]
    pub unpin_message: ::core::option::Option<data_message::UnpinMessage>,
    /// NEXT ID: 30
    #[prost(message, optional, tag = "29")]
    pub admin_delete: ::core::option::Option<data_message::AdminDelete>,
}
/// Nested message and enum types in `DataMessage`.
pub mod data_message {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Payment {
        #[prost(oneof = "payment::Item", tags = "1, 2")]
        pub item: ::core::option::Option<payment::Item>,
    }
    /// Nested message and enum types in `Payment`.
    pub mod payment {
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Amount {
            #[prost(oneof = "amount::Amount", tags = "1")]
            pub amount: ::core::option::Option<amount::Amount>,
        }
        /// Nested message and enum types in `Amount`.
        pub mod amount {
            #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
            pub struct MobileCoin {
                /// 1,000,000,000,000 picoMob per Mob
                #[prost(uint64, optional, tag = "1")]
                pub pico_mob: ::core::option::Option<u64>,
            }
            #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)]
            pub enum Amount {
                #[prost(message, tag = "1")]
                MobileCoin(MobileCoin),
            }
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Notification {
            /// Optional, Refers to the PaymentRequest message, if any.
            #[prost(string, optional, tag = "2")]
            pub note: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(oneof = "notification::Transaction", tags = "1")]
            pub transaction: ::core::option::Option<notification::Transaction>,
        }
        /// Nested message and enum types in `Notification`.
        pub mod notification {
            #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
            pub struct MobileCoin {
                #[prost(bytes = "vec", optional, tag = "1")]
                pub receipt: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            }
            #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
            pub enum Transaction {
                #[prost(message, tag = "1")]
                MobileCoin(MobileCoin),
            }
        }
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Activation {
            #[prost(enumeration = "activation::Type", optional, tag = "1")]
            pub r#type: ::core::option::Option<i32>,
        }
        /// Nested message and enum types in `Activation`.
        pub mod activation {
            #[derive(
                Clone,
                Copy,
                Debug,
                PartialEq,
                Eq,
                Hash,
                PartialOrd,
                Ord,
                ::prost::Enumeration
            )]
            #[repr(i32)]
            pub enum Type {
                Request = 0,
                Activated = 1,
            }
            impl Type {
                /// String value of the enum field names used in the ProtoBuf definition.
                ///
                /// The values are not transformed in any way and thus are considered stable
                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
                pub fn as_str_name(&self) -> &'static str {
                    match self {
                        Self::Request => "REQUEST",
                        Self::Activated => "ACTIVATED",
                    }
                }
                /// Creates an enum from field names used in the ProtoBuf definition.
                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                    match value {
                        "REQUEST" => Some(Self::Request),
                        "ACTIVATED" => Some(Self::Activated),
                        _ => None,
                    }
                }
            }
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
        pub enum Item {
            #[prost(message, tag = "1")]
            Notification(Notification),
            #[prost(message, tag = "2")]
            Activation(Activation),
        }
    }
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Quote {
        #[prost(uint64, optional, tag = "1")]
        pub id: ::core::option::Option<u64>,
        #[prost(string, optional, tag = "5")]
        pub author_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "3")]
        pub text: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(message, repeated, tag = "4")]
        pub attachments: ::prost::alloc::vec::Vec<quote::QuotedAttachment>,
        #[prost(message, repeated, tag = "6")]
        pub body_ranges: ::prost::alloc::vec::Vec<super::BodyRange>,
        #[prost(enumeration = "quote::Type", optional, tag = "7")]
        pub r#type: ::core::option::Option<i32>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "8")]
        pub author_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    /// Nested message and enum types in `Quote`.
    pub mod quote {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct QuotedAttachment {
            #[prost(string, optional, tag = "1")]
            pub content_type: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "2")]
            pub file_name: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(message, optional, tag = "3")]
            pub thumbnail: ::core::option::Option<super::super::AttachmentPointer>,
        }
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Normal = 0,
            GiftBadge = 1,
            Poll = 2,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Normal => "NORMAL",
                    Self::GiftBadge => "GIFT_BADGE",
                    Self::Poll => "POLL",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "NORMAL" => Some(Self::Normal),
                    "GIFT_BADGE" => Some(Self::GiftBadge),
                    "POLL" => Some(Self::Poll),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Contact {
        #[prost(message, optional, tag = "1")]
        pub name: ::core::option::Option<contact::Name>,
        #[prost(message, repeated, tag = "3")]
        pub number: ::prost::alloc::vec::Vec<contact::Phone>,
        #[prost(message, repeated, tag = "4")]
        pub email: ::prost::alloc::vec::Vec<contact::Email>,
        #[prost(message, repeated, tag = "5")]
        pub address: ::prost::alloc::vec::Vec<contact::PostalAddress>,
        #[prost(message, optional, tag = "6")]
        pub avatar: ::core::option::Option<contact::Avatar>,
        #[prost(string, optional, tag = "7")]
        pub organization: ::core::option::Option<::prost::alloc::string::String>,
    }
    /// Nested message and enum types in `Contact`.
    pub mod contact {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Name {
            #[prost(string, optional, tag = "1")]
            pub given_name: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "2")]
            pub family_name: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "3")]
            pub prefix: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "4")]
            pub suffix: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "5")]
            pub middle_name: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "7")]
            pub nickname: ::core::option::Option<::prost::alloc::string::String>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Phone {
            #[prost(string, optional, tag = "1")]
            pub value: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(enumeration = "phone::Type", optional, tag = "2")]
            pub r#type: ::core::option::Option<i32>,
            #[prost(string, optional, tag = "3")]
            pub label: ::core::option::Option<::prost::alloc::string::String>,
        }
        /// Nested message and enum types in `Phone`.
        pub mod phone {
            #[derive(
                Clone,
                Copy,
                Debug,
                PartialEq,
                Eq,
                Hash,
                PartialOrd,
                Ord,
                ::prost::Enumeration
            )]
            #[repr(i32)]
            pub enum Type {
                Home = 1,
                Mobile = 2,
                Work = 3,
                Custom = 4,
            }
            impl Type {
                /// String value of the enum field names used in the ProtoBuf definition.
                ///
                /// The values are not transformed in any way and thus are considered stable
                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
                pub fn as_str_name(&self) -> &'static str {
                    match self {
                        Self::Home => "HOME",
                        Self::Mobile => "MOBILE",
                        Self::Work => "WORK",
                        Self::Custom => "CUSTOM",
                    }
                }
                /// Creates an enum from field names used in the ProtoBuf definition.
                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                    match value {
                        "HOME" => Some(Self::Home),
                        "MOBILE" => Some(Self::Mobile),
                        "WORK" => Some(Self::Work),
                        "CUSTOM" => Some(Self::Custom),
                        _ => None,
                    }
                }
            }
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Email {
            #[prost(string, optional, tag = "1")]
            pub value: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(enumeration = "email::Type", optional, tag = "2")]
            pub r#type: ::core::option::Option<i32>,
            #[prost(string, optional, tag = "3")]
            pub label: ::core::option::Option<::prost::alloc::string::String>,
        }
        /// Nested message and enum types in `Email`.
        pub mod email {
            #[derive(
                Clone,
                Copy,
                Debug,
                PartialEq,
                Eq,
                Hash,
                PartialOrd,
                Ord,
                ::prost::Enumeration
            )]
            #[repr(i32)]
            pub enum Type {
                Home = 1,
                Mobile = 2,
                Work = 3,
                Custom = 4,
            }
            impl Type {
                /// String value of the enum field names used in the ProtoBuf definition.
                ///
                /// The values are not transformed in any way and thus are considered stable
                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
                pub fn as_str_name(&self) -> &'static str {
                    match self {
                        Self::Home => "HOME",
                        Self::Mobile => "MOBILE",
                        Self::Work => "WORK",
                        Self::Custom => "CUSTOM",
                    }
                }
                /// Creates an enum from field names used in the ProtoBuf definition.
                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                    match value {
                        "HOME" => Some(Self::Home),
                        "MOBILE" => Some(Self::Mobile),
                        "WORK" => Some(Self::Work),
                        "CUSTOM" => Some(Self::Custom),
                        _ => None,
                    }
                }
            }
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct PostalAddress {
            #[prost(enumeration = "postal_address::Type", optional, tag = "1")]
            pub r#type: ::core::option::Option<i32>,
            #[prost(string, optional, tag = "2")]
            pub label: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "3")]
            pub street: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "4")]
            pub pobox: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "5")]
            pub neighborhood: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "6")]
            pub city: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "7")]
            pub region: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "8")]
            pub postcode: ::core::option::Option<::prost::alloc::string::String>,
            #[prost(string, optional, tag = "9")]
            pub country: ::core::option::Option<::prost::alloc::string::String>,
        }
        /// Nested message and enum types in `PostalAddress`.
        pub mod postal_address {
            #[derive(
                Clone,
                Copy,
                Debug,
                PartialEq,
                Eq,
                Hash,
                PartialOrd,
                Ord,
                ::prost::Enumeration
            )]
            #[repr(i32)]
            pub enum Type {
                Home = 1,
                Work = 2,
                Custom = 3,
            }
            impl Type {
                /// String value of the enum field names used in the ProtoBuf definition.
                ///
                /// The values are not transformed in any way and thus are considered stable
                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
                pub fn as_str_name(&self) -> &'static str {
                    match self {
                        Self::Home => "HOME",
                        Self::Work => "WORK",
                        Self::Custom => "CUSTOM",
                    }
                }
                /// Creates an enum from field names used in the ProtoBuf definition.
                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                    match value {
                        "HOME" => Some(Self::Home),
                        "WORK" => Some(Self::Work),
                        "CUSTOM" => Some(Self::Custom),
                        _ => None,
                    }
                }
            }
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Avatar {
            #[prost(message, optional, tag = "1")]
            pub avatar: ::core::option::Option<super::super::AttachmentPointer>,
            #[prost(bool, optional, tag = "2")]
            pub is_profile: ::core::option::Option<bool>,
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Sticker {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub pack_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "2")]
        pub pack_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(uint32, optional, tag = "3")]
        pub sticker_id: ::core::option::Option<u32>,
        #[prost(message, optional, tag = "4")]
        pub data: ::core::option::Option<super::AttachmentPointer>,
        #[prost(string, optional, tag = "5")]
        pub emoji: ::core::option::Option<::prost::alloc::string::String>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Reaction {
        #[prost(string, optional, tag = "1")]
        pub emoji: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(bool, optional, tag = "2")]
        pub remove: ::core::option::Option<bool>,
        #[prost(string, optional, tag = "4")]
        pub target_author_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(uint64, optional, tag = "5")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "6")]
        pub target_author_aci_binary: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Delete {
        #[prost(uint64, optional, tag = "1")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct GroupCallUpdate {
        #[prost(string, optional, tag = "1")]
        pub era_id: ::core::option::Option<::prost::alloc::string::String>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct StoryContext {
        #[prost(string, optional, tag = "1")]
        pub author_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(uint64, optional, tag = "2")]
        pub sent_timestamp: ::core::option::Option<u64>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "3")]
        pub author_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct GiftBadge {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub receipt_credential_presentation: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PollCreate {
        #[prost(string, optional, tag = "1")]
        pub question: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(bool, optional, tag = "2")]
        pub allow_multiple: ::core::option::Option<bool>,
        #[prost(string, repeated, tag = "3")]
        pub options: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PollTerminate {
        #[prost(uint64, optional, tag = "1")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PollVote {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub target_author_aci_binary: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
        #[prost(uint64, optional, tag = "2")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
        /// must be in the range [0, options.length) from the PollCreate
        #[prost(uint32, repeated, packed = "false", tag = "3")]
        pub option_indexes: ::prost::alloc::vec::Vec<u32>,
        /// increment this by 1 each time you vote on a given poll
        #[prost(uint32, optional, tag = "4")]
        pub vote_count: ::core::option::Option<u32>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PinMessage {
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "1")]
        pub target_author_aci_binary: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
        #[prost(uint64, optional, tag = "2")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
        #[prost(oneof = "pin_message::PinDuration", tags = "3, 4")]
        pub pin_duration: ::core::option::Option<pin_message::PinDuration>,
    }
    /// Nested message and enum types in `PinMessage`.
    pub mod pin_message {
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)]
        pub enum PinDuration {
            #[prost(uint32, tag = "3")]
            PinDurationSeconds(u32),
            #[prost(bool, tag = "4")]
            PinDurationForever(bool),
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct UnpinMessage {
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "1")]
        pub target_author_aci_binary: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
        #[prost(uint64, optional, tag = "2")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct AdminDelete {
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "1")]
        pub target_author_aci_binary: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
        #[prost(uint64, optional, tag = "2")]
        pub target_sent_timestamp: ::core::option::Option<u64>,
    }
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Flags {
        EndSession = 1,
        ExpirationTimerUpdate = 2,
        ProfileKeyUpdate = 4,
        Forward = 8,
    }
    impl Flags {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::EndSession => "END_SESSION",
                Self::ExpirationTimerUpdate => "EXPIRATION_TIMER_UPDATE",
                Self::ProfileKeyUpdate => "PROFILE_KEY_UPDATE",
                Self::Forward => "FORWARD",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "END_SESSION" => Some(Self::EndSession),
                "EXPIRATION_TIMER_UPDATE" => Some(Self::ExpirationTimerUpdate),
                "PROFILE_KEY_UPDATE" => Some(Self::ProfileKeyUpdate),
                "FORWARD" => Some(Self::Forward),
                _ => None,
            }
        }
    }
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum ProtocolVersion {
        Initial = 0,
        MessageTimers = 1,
        ViewOnce = 2,
        ViewOnceVideo = 3,
        Reactions = 4,
        CdnSelectorAttachments = 5,
        Mentions = 6,
        Payments = 7,
        Polls = 8,
    }
    impl ProtocolVersion {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Initial => "INITIAL",
                Self::MessageTimers => "MESSAGE_TIMERS",
                Self::ViewOnce => "VIEW_ONCE",
                Self::ViewOnceVideo => "VIEW_ONCE_VIDEO",
                Self::Reactions => "REACTIONS",
                Self::CdnSelectorAttachments => "CDN_SELECTOR_ATTACHMENTS",
                Self::Mentions => "MENTIONS",
                Self::Payments => "PAYMENTS",
                Self::Polls => "POLLS",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "INITIAL" => Some(Self::Initial),
                "MESSAGE_TIMERS" => Some(Self::MessageTimers),
                "VIEW_ONCE" => Some(Self::ViewOnce),
                "VIEW_ONCE_VIDEO" => Some(Self::ViewOnceVideo),
                "REACTIONS" => Some(Self::Reactions),
                "CDN_SELECTOR_ATTACHMENTS" => Some(Self::CdnSelectorAttachments),
                "MENTIONS" => Some(Self::Mentions),
                "PAYMENTS" => Some(Self::Payments),
                "POLLS" => Some(Self::Polls),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct NullMessage {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub padding: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ReceiptMessage {
    #[prost(enumeration = "receipt_message::Type", optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(uint64, repeated, packed = "false", tag = "2")]
    pub timestamp: ::prost::alloc::vec::Vec<u64>,
}
/// Nested message and enum types in `ReceiptMessage`.
pub mod receipt_message {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Type {
        Delivery = 0,
        Read = 1,
        Viewed = 2,
    }
    impl Type {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Delivery => "DELIVERY",
                Self::Read => "READ",
                Self::Viewed => "VIEWED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "DELIVERY" => Some(Self::Delivery),
                "READ" => Some(Self::Read),
                "VIEWED" => Some(Self::Viewed),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TypingMessage {
    #[prost(uint64, optional, tag = "1")]
    pub timestamp: ::core::option::Option<u64>,
    #[prost(enumeration = "typing_message::Action", optional, tag = "2")]
    pub action: ::core::option::Option<i32>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub group_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
/// Nested message and enum types in `TypingMessage`.
pub mod typing_message {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Action {
        Started = 0,
        Stopped = 1,
    }
    impl Action {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Started => "STARTED",
                Self::Stopped => "STOPPED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "STARTED" => Some(Self::Started),
                "STOPPED" => Some(Self::Stopped),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StoryMessage {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub profile_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, optional, tag = "2")]
    pub group: ::core::option::Option<GroupContextV2>,
    #[prost(bool, optional, tag = "5")]
    pub allows_replies: ::core::option::Option<bool>,
    #[prost(message, repeated, tag = "6")]
    pub body_ranges: ::prost::alloc::vec::Vec<BodyRange>,
    #[prost(oneof = "story_message::Attachment", tags = "3, 4")]
    pub attachment: ::core::option::Option<story_message::Attachment>,
}
/// Nested message and enum types in `StoryMessage`.
pub mod story_message {
    #[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Attachment {
        #[prost(message, tag = "3")]
        FileAttachment(super::AttachmentPointer),
        #[prost(message, tag = "4")]
        TextAttachment(super::TextAttachment),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Preview {
    #[prost(string, optional, tag = "1")]
    pub url: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub image: ::core::option::Option<AttachmentPointer>,
    #[prost(string, optional, tag = "4")]
    pub description: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(uint64, optional, tag = "5")]
    pub date: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TextAttachment {
    #[prost(string, optional, tag = "1")]
    pub text: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(enumeration = "text_attachment::Style", optional, tag = "2")]
    pub text_style: ::core::option::Option<i32>,
    /// integer representation of hex color
    #[prost(uint32, optional, tag = "3")]
    pub text_foreground_color: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "4")]
    pub text_background_color: ::core::option::Option<u32>,
    #[prost(message, optional, tag = "5")]
    pub preview: ::core::option::Option<Preview>,
    #[prost(oneof = "text_attachment::Background", tags = "6, 7")]
    pub background: ::core::option::Option<text_attachment::Background>,
}
/// Nested message and enum types in `TextAttachment`.
pub mod text_attachment {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Gradient {
        /// deprecated: this field will be removed in a future release.
        #[prost(uint32, optional, tag = "1")]
        pub start_color: ::core::option::Option<u32>,
        /// deprecated: this field will be removed in a future release.
        #[prost(uint32, optional, tag = "2")]
        pub end_color: ::core::option::Option<u32>,
        /// degrees
        #[prost(uint32, optional, tag = "3")]
        pub angle: ::core::option::Option<u32>,
        #[prost(uint32, repeated, packed = "false", tag = "4")]
        pub colors: ::prost::alloc::vec::Vec<u32>,
        /// percent from 0 to 1
        #[prost(float, repeated, packed = "false", tag = "5")]
        pub positions: ::prost::alloc::vec::Vec<f32>,
    }
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Style {
        Default = 0,
        Regular = 1,
        Bold = 2,
        Serif = 3,
        Script = 4,
        Condensed = 5,
    }
    impl Style {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Default => "DEFAULT",
                Self::Regular => "REGULAR",
                Self::Bold => "BOLD",
                Self::Serif => "SERIF",
                Self::Script => "SCRIPT",
                Self::Condensed => "CONDENSED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "DEFAULT" => Some(Self::Default),
                "REGULAR" => Some(Self::Regular),
                "BOLD" => Some(Self::Bold),
                "SERIF" => Some(Self::Serif),
                "SCRIPT" => Some(Self::Script),
                "CONDENSED" => Some(Self::Condensed),
                _ => None,
            }
        }
    }
    #[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Background {
        #[prost(message, tag = "6")]
        Gradient(Gradient),
        #[prost(uint32, tag = "7")]
        Color(u32),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Verified {
    #[prost(string, optional, tag = "5")]
    pub destination_aci: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "2")]
    pub identity_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(enumeration = "verified::State", optional, tag = "3")]
    pub state: ::core::option::Option<i32>,
    #[prost(bytes = "vec", optional, tag = "4")]
    pub null_message: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// 16-byte UUID
    #[prost(bytes = "vec", optional, tag = "6")]
    pub destination_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
/// Nested message and enum types in `Verified`.
pub mod verified {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum State {
        Default = 0,
        Verified = 1,
        Unverified = 2,
    }
    impl State {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Default => "DEFAULT",
                Self::Verified => "VERIFIED",
                Self::Unverified => "UNVERIFIED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "DEFAULT" => Some(Self::Default),
                "VERIFIED" => Some(Self::Verified),
                "UNVERIFIED" => Some(Self::Unverified),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SyncMessage {
    #[prost(message, optional, tag = "1")]
    pub sent: ::core::option::Option<sync_message::Sent>,
    #[prost(message, optional, tag = "2")]
    pub contacts: ::core::option::Option<sync_message::Contacts>,
    #[prost(message, optional, tag = "4")]
    pub request: ::core::option::Option<sync_message::Request>,
    #[prost(message, repeated, tag = "5")]
    pub read: ::prost::alloc::vec::Vec<sync_message::Read>,
    #[prost(message, optional, tag = "6")]
    pub blocked: ::core::option::Option<sync_message::Blocked>,
    #[prost(message, optional, tag = "7")]
    pub verified: ::core::option::Option<Verified>,
    #[prost(message, optional, tag = "9")]
    pub configuration: ::core::option::Option<sync_message::Configuration>,
    #[prost(bytes = "vec", optional, tag = "8")]
    pub padding: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(message, repeated, tag = "10")]
    pub sticker_pack_operation: ::prost::alloc::vec::Vec<
        sync_message::StickerPackOperation,
    >,
    #[prost(message, optional, tag = "11")]
    pub view_once_open: ::core::option::Option<sync_message::ViewOnceOpen>,
    #[prost(message, optional, tag = "12")]
    pub fetch_latest: ::core::option::Option<sync_message::FetchLatest>,
    #[prost(message, optional, tag = "13")]
    pub keys: ::core::option::Option<sync_message::Keys>,
    #[prost(message, optional, tag = "14")]
    pub message_request_response: ::core::option::Option<
        sync_message::MessageRequestResponse,
    >,
    #[prost(message, optional, tag = "15")]
    pub outgoing_payment: ::core::option::Option<sync_message::OutgoingPayment>,
    #[prost(message, repeated, tag = "16")]
    pub viewed: ::prost::alloc::vec::Vec<sync_message::Viewed>,
    #[prost(message, optional, tag = "18")]
    pub pni_change_number: ::core::option::Option<sync_message::PniChangeNumber>,
    #[prost(message, optional, tag = "19")]
    pub call_event: ::core::option::Option<sync_message::CallEvent>,
    #[prost(message, optional, tag = "20")]
    pub call_link_update: ::core::option::Option<sync_message::CallLinkUpdate>,
    #[prost(message, optional, tag = "21")]
    pub call_log_event: ::core::option::Option<sync_message::CallLogEvent>,
    #[prost(message, optional, tag = "22")]
    pub delete_for_me: ::core::option::Option<sync_message::DeleteForMe>,
    #[prost(message, optional, tag = "23")]
    pub device_name_change: ::core::option::Option<sync_message::DeviceNameChange>,
    #[prost(message, optional, tag = "24")]
    pub attachment_backfill_request: ::core::option::Option<
        sync_message::AttachmentBackfillRequest,
    >,
    #[prost(message, optional, tag = "25")]
    pub attachment_backfill_response: ::core::option::Option<
        sync_message::AttachmentBackfillResponse,
    >,
}
/// Nested message and enum types in `SyncMessage`.
pub mod sync_message {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Sent {
        #[prost(string, optional, tag = "1")]
        pub destination_e164: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "7")]
        pub destination_service_id: ::core::option::Option<
            ::prost::alloc::string::String,
        >,
        #[prost(uint64, optional, tag = "2")]
        pub timestamp: ::core::option::Option<u64>,
        #[prost(message, optional, tag = "3")]
        pub message: ::core::option::Option<super::DataMessage>,
        #[prost(uint64, optional, tag = "4")]
        pub expiration_start_timestamp: ::core::option::Option<u64>,
        #[prost(message, repeated, tag = "5")]
        pub unidentified_status: ::prost::alloc::vec::Vec<
            sent::UnidentifiedDeliveryStatus,
        >,
        #[prost(bool, optional, tag = "6", default = "false")]
        pub is_recipient_update: ::core::option::Option<bool>,
        #[prost(message, optional, tag = "8")]
        pub story_message: ::core::option::Option<super::StoryMessage>,
        #[prost(message, repeated, tag = "9")]
        pub story_message_recipients: ::prost::alloc::vec::Vec<
            sent::StoryMessageRecipient,
        >,
        #[prost(message, optional, tag = "10")]
        pub edit_message: ::core::option::Option<super::EditMessage>,
        /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
        #[prost(bytes = "vec", optional, tag = "12")]
        pub destination_service_id_binary: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
    }
    /// Nested message and enum types in `Sent`.
    pub mod sent {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct UnidentifiedDeliveryStatus {
            #[prost(string, optional, tag = "3")]
            pub destination_service_id: ::core::option::Option<
                ::prost::alloc::string::String,
            >,
            #[prost(bool, optional, tag = "2")]
            pub unidentified: ::core::option::Option<bool>,
            /// Only set for PNI destinations
            #[prost(bytes = "vec", optional, tag = "5")]
            pub destination_pni_identity_key: ::core::option::Option<
                ::prost::alloc::vec::Vec<u8>,
            >,
            /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
            #[prost(bytes = "vec", optional, tag = "6")]
            pub destination_service_id_binary: ::core::option::Option<
                ::prost::alloc::vec::Vec<u8>,
            >,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct StoryMessageRecipient {
            #[prost(string, optional, tag = "1")]
            pub destination_service_id: ::core::option::Option<
                ::prost::alloc::string::String,
            >,
            #[prost(string, repeated, tag = "2")]
            pub distribution_list_ids: ::prost::alloc::vec::Vec<
                ::prost::alloc::string::String,
            >,
            #[prost(bool, optional, tag = "3")]
            pub is_allowed_to_reply: ::core::option::Option<bool>,
            /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
            #[prost(bytes = "vec", optional, tag = "5")]
            pub destination_service_id_binary: ::core::option::Option<
                ::prost::alloc::vec::Vec<u8>,
            >,
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Contacts {
        #[prost(message, optional, tag = "1")]
        pub blob: ::core::option::Option<super::AttachmentPointer>,
        #[prost(bool, optional, tag = "2", default = "false")]
        pub complete: ::core::option::Option<bool>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Blocked {
        #[prost(string, repeated, tag = "1")]
        pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
        #[prost(string, repeated, tag = "3")]
        pub acis: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
        #[prost(bytes = "vec", repeated, tag = "2")]
        pub group_ids: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
        /// 16-byte UUID
        #[prost(bytes = "vec", repeated, tag = "4")]
        pub acis_binary: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Request {
        #[prost(enumeration = "request::Type", optional, tag = "1")]
        pub r#type: ::core::option::Option<i32>,
    }
    /// Nested message and enum types in `Request`.
    pub mod request {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Unknown = 0,
            Contacts = 1,
            Blocked = 3,
            Configuration = 4,
            Keys = 5,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Unknown => "UNKNOWN",
                    Self::Contacts => "CONTACTS",
                    Self::Blocked => "BLOCKED",
                    Self::Configuration => "CONFIGURATION",
                    Self::Keys => "KEYS",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN" => Some(Self::Unknown),
                    "CONTACTS" => Some(Self::Contacts),
                    "BLOCKED" => Some(Self::Blocked),
                    "CONFIGURATION" => Some(Self::Configuration),
                    "KEYS" => Some(Self::Keys),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Read {
        #[prost(string, optional, tag = "3")]
        pub sender_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(uint64, optional, tag = "2")]
        pub timestamp: ::core::option::Option<u64>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "4")]
        pub sender_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Viewed {
        #[prost(string, optional, tag = "3")]
        pub sender_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(uint64, optional, tag = "2")]
        pub timestamp: ::core::option::Option<u64>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "4")]
        pub sender_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Configuration {
        #[prost(bool, optional, tag = "1")]
        pub read_receipts: ::core::option::Option<bool>,
        #[prost(bool, optional, tag = "2")]
        pub unidentified_delivery_indicators: ::core::option::Option<bool>,
        #[prost(bool, optional, tag = "3")]
        pub typing_indicators: ::core::option::Option<bool>,
        #[prost(uint32, optional, tag = "5")]
        pub provisioning_version: ::core::option::Option<u32>,
        #[prost(bool, optional, tag = "6")]
        pub link_previews: ::core::option::Option<bool>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct StickerPackOperation {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub pack_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "2")]
        pub pack_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(enumeration = "sticker_pack_operation::Type", optional, tag = "3")]
        pub r#type: ::core::option::Option<i32>,
    }
    /// Nested message and enum types in `StickerPackOperation`.
    pub mod sticker_pack_operation {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Install = 0,
            Remove = 1,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Install => "INSTALL",
                    Self::Remove => "REMOVE",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "INSTALL" => Some(Self::Install),
                    "REMOVE" => Some(Self::Remove),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct ViewOnceOpen {
        #[prost(string, optional, tag = "3")]
        pub sender_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(uint64, optional, tag = "2")]
        pub timestamp: ::core::option::Option<u64>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "4")]
        pub sender_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct FetchLatest {
        #[prost(enumeration = "fetch_latest::Type", optional, tag = "1")]
        pub r#type: ::core::option::Option<i32>,
    }
    /// Nested message and enum types in `FetchLatest`.
    pub mod fetch_latest {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Unknown = 0,
            LocalProfile = 1,
            StorageManifest = 2,
            SubscriptionStatus = 3,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Unknown => "UNKNOWN",
                    Self::LocalProfile => "LOCAL_PROFILE",
                    Self::StorageManifest => "STORAGE_MANIFEST",
                    Self::SubscriptionStatus => "SUBSCRIPTION_STATUS",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN" => Some(Self::Unknown),
                    "LOCAL_PROFILE" => Some(Self::LocalProfile),
                    "STORAGE_MANIFEST" => Some(Self::StorageManifest),
                    "SUBSCRIPTION_STATUS" => Some(Self::SubscriptionStatus),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Keys {
        /// deprecated: this field will be removed in a future release.
        #[prost(bytes = "vec", optional, tag = "2")]
        pub master: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(string, optional, tag = "3")]
        pub account_entropy_pool: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(bytes = "vec", optional, tag = "4")]
        pub media_root_backup_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PniIdentity {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub public_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "2")]
        pub private_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct MessageRequestResponse {
        #[prost(string, optional, tag = "2")]
        pub thread_aci: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(bytes = "vec", optional, tag = "3")]
        pub group_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(enumeration = "message_request_response::Type", optional, tag = "4")]
        pub r#type: ::core::option::Option<i32>,
        /// 16-byte UUID
        #[prost(bytes = "vec", optional, tag = "5")]
        pub thread_aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    /// Nested message and enum types in `MessageRequestResponse`.
    pub mod message_request_response {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Unknown = 0,
            Accept = 1,
            Delete = 2,
            Block = 3,
            BlockAndDelete = 4,
            Spam = 5,
            BlockAndSpam = 6,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Unknown => "UNKNOWN",
                    Self::Accept => "ACCEPT",
                    Self::Delete => "DELETE",
                    Self::Block => "BLOCK",
                    Self::BlockAndDelete => "BLOCK_AND_DELETE",
                    Self::Spam => "SPAM",
                    Self::BlockAndSpam => "BLOCK_AND_SPAM",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN" => Some(Self::Unknown),
                    "ACCEPT" => Some(Self::Accept),
                    "DELETE" => Some(Self::Delete),
                    "BLOCK" => Some(Self::Block),
                    "BLOCK_AND_DELETE" => Some(Self::BlockAndDelete),
                    "SPAM" => Some(Self::Spam),
                    "BLOCK_AND_SPAM" => Some(Self::BlockAndSpam),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct OutgoingPayment {
        #[prost(string, optional, tag = "1")]
        pub recipient_service_id: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "2")]
        pub note: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(oneof = "outgoing_payment::AttachmentIdentifier", tags = "3")]
        pub attachment_identifier: ::core::option::Option<
            outgoing_payment::AttachmentIdentifier,
        >,
    }
    /// Nested message and enum types in `OutgoingPayment`.
    pub mod outgoing_payment {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct MobileCoin {
            #[prost(bytes = "vec", optional, tag = "1")]
            pub recipient_address: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            #[prost(uint64, optional, tag = "2")]
            pub amount_pico_mob: ::core::option::Option<u64>,
            #[prost(uint64, optional, tag = "3")]
            pub fee_pico_mob: ::core::option::Option<u64>,
            #[prost(bytes = "vec", optional, tag = "4")]
            pub receipt: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            #[prost(uint64, optional, tag = "5")]
            pub ledger_block_timestamp: ::core::option::Option<u64>,
            #[prost(uint64, optional, tag = "6")]
            pub ledger_block_index: ::core::option::Option<u64>,
            #[prost(bytes = "vec", repeated, tag = "7")]
            pub spent_key_images: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
            #[prost(bytes = "vec", repeated, tag = "8")]
            pub output_public_keys: ::prost::alloc::vec::Vec<
                ::prost::alloc::vec::Vec<u8>,
            >,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
        pub enum AttachmentIdentifier {
            #[prost(message, tag = "3")]
            MobileCoin(MobileCoin),
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PniChangeNumber {
        /// Serialized libsignal-client IdentityKeyPair
        #[prost(bytes = "vec", optional, tag = "1")]
        pub identity_key_pair: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        /// Serialized libsignal-client SignedPreKeyRecord
        #[prost(bytes = "vec", optional, tag = "2")]
        pub signed_pre_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        /// Serialized libsignal-client KyberPreKeyRecord
        #[prost(bytes = "vec", optional, tag = "5")]
        pub last_resort_kyber_pre_key: ::core::option::Option<
            ::prost::alloc::vec::Vec<u8>,
        >,
        #[prost(uint32, optional, tag = "3")]
        pub registration_id: ::core::option::Option<u32>,
        /// The e164 we have changed our number to
        #[prost(string, optional, tag = "4")]
        pub new_e164: ::core::option::Option<::prost::alloc::string::String>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct CallEvent {
        /// Data identifying a conversation. The service ID for 1:1, the group ID for
        /// group, or the room ID for an ad-hoc call. See also
        /// `CallLogEvent/conversationId`.
        #[prost(bytes = "vec", optional, tag = "1")]
        pub conversation_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        /// An identifier for a call. Generated directly for 1:1, or derived from
        /// the era ID for group and ad-hoc calls. See also `CallLogEvent/callId`.
        #[prost(uint64, optional, tag = "2")]
        pub call_id: ::core::option::Option<u64>,
        #[prost(uint64, optional, tag = "3")]
        pub timestamp: ::core::option::Option<u64>,
        #[prost(enumeration = "call_event::Type", optional, tag = "4")]
        pub r#type: ::core::option::Option<i32>,
        #[prost(enumeration = "call_event::Direction", optional, tag = "5")]
        pub direction: ::core::option::Option<i32>,
        #[prost(enumeration = "call_event::Event", optional, tag = "6")]
        pub event: ::core::option::Option<i32>,
    }
    /// Nested message and enum types in `CallEvent`.
    pub mod call_event {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            UnknownType = 0,
            AudioCall = 1,
            VideoCall = 2,
            GroupCall = 3,
            AdHocCall = 4,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::UnknownType => "UNKNOWN_TYPE",
                    Self::AudioCall => "AUDIO_CALL",
                    Self::VideoCall => "VIDEO_CALL",
                    Self::GroupCall => "GROUP_CALL",
                    Self::AdHocCall => "AD_HOC_CALL",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN_TYPE" => Some(Self::UnknownType),
                    "AUDIO_CALL" => Some(Self::AudioCall),
                    "VIDEO_CALL" => Some(Self::VideoCall),
                    "GROUP_CALL" => Some(Self::GroupCall),
                    "AD_HOC_CALL" => Some(Self::AdHocCall),
                    _ => None,
                }
            }
        }
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Direction {
            UnknownDirection = 0,
            Incoming = 1,
            Outgoing = 2,
        }
        impl Direction {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::UnknownDirection => "UNKNOWN_DIRECTION",
                    Self::Incoming => "INCOMING",
                    Self::Outgoing => "OUTGOING",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN_DIRECTION" => Some(Self::UnknownDirection),
                    "INCOMING" => Some(Self::Incoming),
                    "OUTGOING" => Some(Self::Outgoing),
                    _ => None,
                }
            }
        }
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Event {
            UnknownEvent = 0,
            Accepted = 1,
            NotAccepted = 2,
            Delete = 3,
            Observed = 4,
        }
        impl Event {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::UnknownEvent => "UNKNOWN_EVENT",
                    Self::Accepted => "ACCEPTED",
                    Self::NotAccepted => "NOT_ACCEPTED",
                    Self::Delete => "DELETE",
                    Self::Observed => "OBSERVED",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN_EVENT" => Some(Self::UnknownEvent),
                    "ACCEPTED" => Some(Self::Accepted),
                    "NOT_ACCEPTED" => Some(Self::NotAccepted),
                    "DELETE" => Some(Self::Delete),
                    "OBSERVED" => Some(Self::Observed),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct CallLinkUpdate {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub root_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "2")]
        pub admin_passkey: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        /// defaults to UPDATE
        #[prost(enumeration = "call_link_update::Type", optional, tag = "3")]
        pub r#type: ::core::option::Option<i32>,
    }
    /// Nested message and enum types in `CallLinkUpdate`.
    pub mod call_link_update {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Update = 0,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Update => "UPDATE",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UPDATE" => Some(Self::Update),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct CallLogEvent {
        #[prost(enumeration = "call_log_event::Type", optional, tag = "1")]
        pub r#type: ::core::option::Option<i32>,
        #[prost(uint64, optional, tag = "2")]
        pub timestamp: ::core::option::Option<u64>,
        /// Data identifying a conversation. The service ID for 1:1, the group ID for
        /// group, or the room ID for an ad-hoc call. See also
        /// `CallEvent/conversationId`.
        #[prost(bytes = "vec", optional, tag = "3")]
        pub conversation_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        /// An identifier for a call. Generated directly for 1:1, or derived from
        /// the era ID for group and ad-hoc calls. See also `CallEvent/callId`.
        #[prost(uint64, optional, tag = "4")]
        pub call_id: ::core::option::Option<u64>,
    }
    /// Nested message and enum types in `CallLogEvent`.
    pub mod call_log_event {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Clear = 0,
            MarkedAsRead = 1,
            MarkedAsReadInConversation = 2,
            ClearInConversation = 3,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Clear => "CLEAR",
                    Self::MarkedAsRead => "MARKED_AS_READ",
                    Self::MarkedAsReadInConversation => "MARKED_AS_READ_IN_CONVERSATION",
                    Self::ClearInConversation => "CLEAR_IN_CONVERSATION",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "CLEAR" => Some(Self::Clear),
                    "MARKED_AS_READ" => Some(Self::MarkedAsRead),
                    "MARKED_AS_READ_IN_CONVERSATION" => {
                        Some(Self::MarkedAsReadInConversation)
                    }
                    "CLEAR_IN_CONVERSATION" => Some(Self::ClearInConversation),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct DeleteForMe {
        #[prost(message, repeated, tag = "1")]
        pub message_deletes: ::prost::alloc::vec::Vec<delete_for_me::MessageDeletes>,
        #[prost(message, repeated, tag = "2")]
        pub conversation_deletes: ::prost::alloc::vec::Vec<
            delete_for_me::ConversationDelete,
        >,
        #[prost(message, repeated, tag = "3")]
        pub local_only_conversation_deletes: ::prost::alloc::vec::Vec<
            delete_for_me::LocalOnlyConversationDelete,
        >,
        #[prost(message, repeated, tag = "4")]
        pub attachment_deletes: ::prost::alloc::vec::Vec<
            delete_for_me::AttachmentDelete,
        >,
    }
    /// Nested message and enum types in `DeleteForMe`.
    pub mod delete_for_me {
        #[derive(Clone, PartialEq, ::prost::Message)]
        pub struct MessageDeletes {
            #[prost(message, optional, tag = "1")]
            pub conversation: ::core::option::Option<
                super::super::ConversationIdentifier,
            >,
            #[prost(message, repeated, tag = "2")]
            pub messages: ::prost::alloc::vec::Vec<super::super::AddressableMessage>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct AttachmentDelete {
            #[prost(message, optional, tag = "1")]
            pub conversation: ::core::option::Option<
                super::super::ConversationIdentifier,
            >,
            #[prost(message, optional, tag = "2")]
            pub target_message: ::core::option::Option<super::super::AddressableMessage>,
            /// The `clientUuid` from `AttachmentPointer`.
            #[prost(bytes = "vec", optional, tag = "3")]
            pub client_uuid: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            /// SHA256 hash of the (encrypted, padded, etc.) attachment blob on the CDN.
            #[prost(bytes = "vec", optional, tag = "4")]
            pub fallback_digest: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
            /// SHA256 hash of the plaintext content of the attachment.
            #[prost(bytes = "vec", optional, tag = "5")]
            pub fallback_plaintext_hash: ::core::option::Option<
                ::prost::alloc::vec::Vec<u8>,
            >,
        }
        #[derive(Clone, PartialEq, ::prost::Message)]
        pub struct ConversationDelete {
            #[prost(message, optional, tag = "1")]
            pub conversation: ::core::option::Option<
                super::super::ConversationIdentifier,
            >,
            #[prost(message, repeated, tag = "2")]
            pub most_recent_messages: ::prost::alloc::vec::Vec<
                super::super::AddressableMessage,
            >,
            #[prost(bool, optional, tag = "3")]
            pub is_full_delete: ::core::option::Option<bool>,
            #[prost(message, repeated, tag = "4")]
            pub most_recent_non_expiring_messages: ::prost::alloc::vec::Vec<
                super::super::AddressableMessage,
            >,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct LocalOnlyConversationDelete {
            #[prost(message, optional, tag = "1")]
            pub conversation: ::core::option::Option<
                super::super::ConversationIdentifier,
            >,
        }
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct DeviceNameChange {
        #[prost(uint32, optional, tag = "2")]
        pub device_id: ::core::option::Option<u32>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct AttachmentBackfillRequest {
        #[prost(message, optional, tag = "1")]
        pub target_message: ::core::option::Option<super::AddressableMessage>,
        #[prost(message, optional, tag = "2")]
        pub target_conversation: ::core::option::Option<super::ConversationIdentifier>,
    }
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct AttachmentBackfillResponse {
        #[prost(message, optional, tag = "1")]
        pub target_message: ::core::option::Option<super::AddressableMessage>,
        #[prost(message, optional, tag = "2")]
        pub target_conversation: ::core::option::Option<super::ConversationIdentifier>,
        #[prost(oneof = "attachment_backfill_response::Data", tags = "3, 4")]
        pub data: ::core::option::Option<attachment_backfill_response::Data>,
    }
    /// Nested message and enum types in `AttachmentBackfillResponse`.
    pub mod attachment_backfill_response {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct AttachmentData {
            #[prost(oneof = "attachment_data::Data", tags = "1, 2")]
            pub data: ::core::option::Option<attachment_data::Data>,
        }
        /// Nested message and enum types in `AttachmentData`.
        pub mod attachment_data {
            #[derive(
                Clone,
                Copy,
                Debug,
                PartialEq,
                Eq,
                Hash,
                PartialOrd,
                Ord,
                ::prost::Enumeration
            )]
            #[repr(i32)]
            pub enum Status {
                Pending = 0,
                TerminalError = 1,
            }
            impl Status {
                /// String value of the enum field names used in the ProtoBuf definition.
                ///
                /// The values are not transformed in any way and thus are considered stable
                /// (if the ProtoBuf definition does not change) and safe for programmatic use.
                pub fn as_str_name(&self) -> &'static str {
                    match self {
                        Self::Pending => "PENDING",
                        Self::TerminalError => "TERMINAL_ERROR",
                    }
                }
                /// Creates an enum from field names used in the ProtoBuf definition.
                pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                    match value {
                        "PENDING" => Some(Self::Pending),
                        "TERMINAL_ERROR" => Some(Self::TerminalError),
                        _ => None,
                    }
                }
            }
            #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
            pub enum Data {
                #[prost(message, tag = "1")]
                Attachment(super::super::super::AttachmentPointer),
                #[prost(enumeration = "Status", tag = "2")]
                Status(i32),
            }
        }
        #[derive(Clone, PartialEq, ::prost::Message)]
        pub struct AttachmentDataList {
            #[prost(message, repeated, tag = "1")]
            pub attachments: ::prost::alloc::vec::Vec<AttachmentData>,
            #[prost(message, optional, tag = "2")]
            pub long_text: ::core::option::Option<AttachmentData>,
        }
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Error {
            MessageNotFound = 0,
        }
        impl Error {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::MessageNotFound => "MESSAGE_NOT_FOUND",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "MESSAGE_NOT_FOUND" => Some(Self::MessageNotFound),
                    _ => None,
                }
            }
        }
        #[derive(Clone, PartialEq, ::prost::Oneof)]
        pub enum Data {
            #[prost(message, tag = "3")]
            Attachments(AttachmentDataList),
            #[prost(enumeration = "Error", tag = "4")]
            Error(i32),
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AttachmentPointer {
    /// Cross-client identifier for this attachment among all attachments on the
    /// owning message.
    #[prost(bytes = "vec", optional, tag = "20")]
    pub client_uuid: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "2")]
    pub content_type: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(uint32, optional, tag = "4")]
    pub size: ::core::option::Option<u32>,
    #[prost(bytes = "vec", optional, tag = "5")]
    pub thumbnail: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "6")]
    pub digest: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(bytes = "vec", optional, tag = "19")]
    pub incremental_mac: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(uint32, optional, tag = "17")]
    pub chunk_size: ::core::option::Option<u32>,
    #[prost(string, optional, tag = "7")]
    pub file_name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(uint32, optional, tag = "8")]
    pub flags: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "9")]
    pub width: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "10")]
    pub height: ::core::option::Option<u32>,
    #[prost(string, optional, tag = "11")]
    pub caption: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "12")]
    pub blur_hash: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(uint64, optional, tag = "13")]
    pub upload_timestamp: ::core::option::Option<u64>,
    /// Next ID: 21
    #[prost(uint32, optional, tag = "14")]
    pub cdn_number: ::core::option::Option<u32>,
    #[prost(oneof = "attachment_pointer::AttachmentIdentifier", tags = "1, 15")]
    pub attachment_identifier: ::core::option::Option<
        attachment_pointer::AttachmentIdentifier,
    >,
}
/// Nested message and enum types in `AttachmentPointer`.
pub mod attachment_pointer {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Flags {
        VoiceMessage = 1,
        Borderless = 2,
        Gif = 8,
    }
    impl Flags {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::VoiceMessage => "VOICE_MESSAGE",
                Self::Borderless => "BORDERLESS",
                Self::Gif => "GIF",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "VOICE_MESSAGE" => Some(Self::VoiceMessage),
                "BORDERLESS" => Some(Self::Borderless),
                "GIF" => Some(Self::Gif),
                _ => None,
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum AttachmentIdentifier {
        #[prost(fixed64, tag = "1")]
        CdnId(u64),
        #[prost(string, tag = "15")]
        CdnKey(::prost::alloc::string::String),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupContextV2 {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub master_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(uint32, optional, tag = "2")]
    pub revision: ::core::option::Option<u32>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub group_change: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ContactDetails {
    #[prost(string, optional, tag = "1")]
    pub number: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "9")]
    pub aci: ::core::option::Option<::prost::alloc::string::String>,
    /// 16-byte UUID
    #[prost(bytes = "vec", optional, tag = "13")]
    pub aci_binary: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, optional, tag = "2")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub avatar: ::core::option::Option<contact_details::Avatar>,
    #[prost(uint32, optional, tag = "8")]
    pub expire_timer: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "12")]
    pub expire_timer_version: ::core::option::Option<u32>,
    #[prost(uint32, optional, tag = "10")]
    pub inbox_position: ::core::option::Option<u32>,
}
/// Nested message and enum types in `ContactDetails`.
pub mod contact_details {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Avatar {
        #[prost(string, optional, tag = "1")]
        pub content_type: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(uint32, optional, tag = "2")]
        pub length: ::core::option::Option<u32>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PaymentAddress {
    #[prost(oneof = "payment_address::Address", tags = "1")]
    pub address: ::core::option::Option<payment_address::Address>,
}
/// Nested message and enum types in `PaymentAddress`.
pub mod payment_address {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct MobileCoin {
        #[prost(bytes = "vec", optional, tag = "1")]
        pub public_address: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
        #[prost(bytes = "vec", optional, tag = "2")]
        pub signature: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Address {
        #[prost(message, tag = "1")]
        MobileCoin(MobileCoin),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DecryptionErrorMessage {
    /// set to the public ratchet key from the SignalMessage if a 1-1 payload fails to decrypt
    #[prost(bytes = "vec", optional, tag = "1")]
    pub ratchet_key: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(uint64, optional, tag = "2")]
    pub timestamp: ::core::option::Option<u64>,
    #[prost(uint32, optional, tag = "3")]
    pub device_id: ::core::option::Option<u32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PniSignatureMessage {
    #[prost(bytes = "vec", optional, tag = "1")]
    pub pni: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    /// Signature *by* the PNI identity key *of* the ACI identity key
    #[prost(bytes = "vec", optional, tag = "2")]
    pub signature: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EditMessage {
    #[prost(uint64, optional, tag = "1")]
    pub target_sent_timestamp: ::core::option::Option<u64>,
    #[prost(message, optional, tag = "2")]
    pub data_message: ::core::option::Option<DataMessage>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BodyRange {
    /// Starting index in UTF-16 code units/raw string representation
    #[prost(uint32, optional, tag = "1")]
    pub start: ::core::option::Option<u32>,
    /// Length of range in UTF-16 code units/raw string representation
    #[prost(uint32, optional, tag = "2")]
    pub length: ::core::option::Option<u32>,
    #[prost(oneof = "body_range::AssociatedValue", tags = "3, 4, 5")]
    pub associated_value: ::core::option::Option<body_range::AssociatedValue>,
}
/// Nested message and enum types in `BodyRange`.
pub mod body_range {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Style {
        None = 0,
        Bold = 1,
        Italic = 2,
        Spoiler = 3,
        Strikethrough = 4,
        Monospace = 5,
    }
    impl Style {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::None => "NONE",
                Self::Bold => "BOLD",
                Self::Italic => "ITALIC",
                Self::Spoiler => "SPOILER",
                Self::Strikethrough => "STRIKETHROUGH",
                Self::Monospace => "MONOSPACE",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "NONE" => Some(Self::None),
                "BOLD" => Some(Self::Bold),
                "ITALIC" => Some(Self::Italic),
                "SPOILER" => Some(Self::Spoiler),
                "STRIKETHROUGH" => Some(Self::Strikethrough),
                "MONOSPACE" => Some(Self::Monospace),
                _ => None,
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum AssociatedValue {
        #[prost(string, tag = "3")]
        MentionAci(::prost::alloc::string::String),
        #[prost(enumeration = "Style", tag = "4")]
        Style(i32),
        /// 16-byte UUID
        #[prost(bytes, tag = "5")]
        MentionAciBinary(::prost::alloc::vec::Vec<u8>),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AddressableMessage {
    #[prost(uint64, optional, tag = "3")]
    pub sent_timestamp: ::core::option::Option<u64>,
    #[prost(oneof = "addressable_message::Author", tags = "1, 2, 4")]
    pub author: ::core::option::Option<addressable_message::Author>,
}
/// Nested message and enum types in `AddressableMessage`.
pub mod addressable_message {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Author {
        #[prost(string, tag = "1")]
        AuthorServiceId(::prost::alloc::string::String),
        #[prost(string, tag = "2")]
        AuthorE164(::prost::alloc::string::String),
        /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
        #[prost(bytes, tag = "4")]
        AuthorServiceIdBinary(::prost::alloc::vec::Vec<u8>),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ConversationIdentifier {
    #[prost(oneof = "conversation_identifier::Identifier", tags = "1, 2, 3, 4")]
    pub identifier: ::core::option::Option<conversation_identifier::Identifier>,
}
/// Nested message and enum types in `ConversationIdentifier`.
pub mod conversation_identifier {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Identifier {
        #[prost(string, tag = "1")]
        ThreadServiceId(::prost::alloc::string::String),
        #[prost(bytes, tag = "2")]
        ThreadGroupId(::prost::alloc::vec::Vec<u8>),
        #[prost(string, tag = "3")]
        ThreadE164(::prost::alloc::string::String),
        /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
        #[prost(bytes, tag = "4")]
        ThreadServiceIdBinary(::prost::alloc::vec::Vec<u8>),
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Pack {
    #[prost(string, optional, tag = "1")]
    pub title: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub author: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(message, optional, tag = "3")]
    pub cover: ::core::option::Option<pack::Sticker>,
    #[prost(message, repeated, tag = "4")]
    pub stickers: ::prost::alloc::vec::Vec<pack::Sticker>,
}
/// Nested message and enum types in `Pack`.
pub mod pack {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Sticker {
        #[prost(uint32, optional, tag = "1")]
        pub id: ::core::option::Option<u32>,
        #[prost(string, optional, tag = "2")]
        pub emoji: ::core::option::Option<::prost::alloc::string::String>,
        #[prost(string, optional, tag = "3")]
        pub content_type: ::core::option::Option<::prost::alloc::string::String>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StorageManifest {
    #[prost(uint64, tag = "1")]
    pub version: u64,
    #[prost(bytes = "vec", tag = "2")]
    pub value: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StorageItem {
    #[prost(bytes = "vec", tag = "1")]
    pub key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "2")]
    pub value: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StorageItems {
    #[prost(message, repeated, tag = "1")]
    pub items: ::prost::alloc::vec::Vec<StorageItem>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ReadOperation {
    #[prost(bytes = "vec", repeated, tag = "1")]
    pub read_key: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct WriteOperation {
    #[prost(message, optional, tag = "1")]
    pub manifest: ::core::option::Option<StorageManifest>,
    #[prost(message, repeated, tag = "2")]
    pub insert_item: ::prost::alloc::vec::Vec<StorageItem>,
    #[prost(bytes = "vec", repeated, tag = "3")]
    pub delete_key: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
    #[prost(bool, tag = "4")]
    pub clear_all: bool,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ManifestRecord {
    #[prost(uint64, tag = "1")]
    pub version: u64,
    #[prost(uint32, tag = "3")]
    pub source_device: u32,
    #[prost(message, repeated, tag = "2")]
    pub identifiers: ::prost::alloc::vec::Vec<manifest_record::Identifier>,
    /// Next ID: 5
    #[prost(bytes = "vec", tag = "4")]
    pub record_ikm: ::prost::alloc::vec::Vec<u8>,
}
/// Nested message and enum types in `ManifestRecord`.
pub mod manifest_record {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Identifier {
        #[prost(bytes = "vec", tag = "1")]
        pub raw: ::prost::alloc::vec::Vec<u8>,
        #[prost(enumeration = "identifier::Type", tag = "2")]
        pub r#type: i32,
    }
    /// Nested message and enum types in `Identifier`.
    pub mod identifier {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Type {
            Unknown = 0,
            Contact = 1,
            Groupv1 = 2,
            Groupv2 = 3,
            Account = 4,
            StoryDistributionList = 5,
            CallLink = 7,
            ChatFolder = 8,
            NotificationProfile = 9,
        }
        impl Type {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Unknown => "UNKNOWN",
                    Self::Contact => "CONTACT",
                    Self::Groupv1 => "GROUPV1",
                    Self::Groupv2 => "GROUPV2",
                    Self::Account => "ACCOUNT",
                    Self::StoryDistributionList => "STORY_DISTRIBUTION_LIST",
                    Self::CallLink => "CALL_LINK",
                    Self::ChatFolder => "CHAT_FOLDER",
                    Self::NotificationProfile => "NOTIFICATION_PROFILE",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN" => Some(Self::Unknown),
                    "CONTACT" => Some(Self::Contact),
                    "GROUPV1" => Some(Self::Groupv1),
                    "GROUPV2" => Some(Self::Groupv2),
                    "ACCOUNT" => Some(Self::Account),
                    "STORY_DISTRIBUTION_LIST" => Some(Self::StoryDistributionList),
                    "CALL_LINK" => Some(Self::CallLink),
                    "CHAT_FOLDER" => Some(Self::ChatFolder),
                    "NOTIFICATION_PROFILE" => Some(Self::NotificationProfile),
                    _ => None,
                }
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StorageRecord {
    #[prost(oneof = "storage_record::Record", tags = "1, 2, 3, 4, 5, 7, 8, 9")]
    pub record: ::core::option::Option<storage_record::Record>,
}
/// Nested message and enum types in `StorageRecord`.
pub mod storage_record {
    #[derive(Clone, PartialEq, ::prost::Oneof)]
    pub enum Record {
        #[prost(message, tag = "1")]
        Contact(super::ContactRecord),
        #[prost(message, tag = "2")]
        GroupV1(super::GroupV1Record),
        #[prost(message, tag = "3")]
        GroupV2(super::GroupV2Record),
        #[prost(message, tag = "4")]
        Account(super::AccountRecord),
        #[prost(message, tag = "5")]
        StoryDistributionList(super::StoryDistributionListRecord),
        #[prost(message, tag = "7")]
        CallLink(super::CallLinkRecord),
        #[prost(message, tag = "8")]
        ChatFolder(super::ChatFolderRecord),
        #[prost(message, tag = "9")]
        NotificationProfile(super::NotificationProfile),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ContactRecord {
    #[prost(string, tag = "1")]
    pub aci: ::prost::alloc::string::String,
    #[prost(string, tag = "2")]
    pub e164: ::prost::alloc::string::String,
    #[prost(string, tag = "15")]
    pub pni: ::prost::alloc::string::String,
    #[prost(bytes = "vec", tag = "3")]
    pub profile_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "4")]
    pub identity_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(enumeration = "contact_record::IdentityState", tag = "5")]
    pub identity_state: i32,
    #[prost(string, tag = "6")]
    pub given_name: ::prost::alloc::string::String,
    #[prost(string, tag = "7")]
    pub family_name: ::prost::alloc::string::String,
    #[prost(string, tag = "8")]
    pub username: ::prost::alloc::string::String,
    #[prost(bool, tag = "9")]
    pub blocked: bool,
    #[prost(bool, tag = "10")]
    pub whitelisted: bool,
    #[prost(bool, tag = "11")]
    pub archived: bool,
    #[prost(bool, tag = "12")]
    pub marked_unread: bool,
    #[prost(uint64, tag = "13")]
    pub muted_until_timestamp: u64,
    #[prost(bool, tag = "14")]
    pub hide_story: bool,
    #[prost(uint64, tag = "16")]
    pub unregistered_at_timestamp: u64,
    #[prost(string, tag = "17")]
    pub system_given_name: ::prost::alloc::string::String,
    #[prost(string, tag = "18")]
    pub system_family_name: ::prost::alloc::string::String,
    #[prost(string, tag = "19")]
    pub system_nickname: ::prost::alloc::string::String,
    #[prost(bool, tag = "20")]
    pub hidden: bool,
    #[prost(bool, tag = "21")]
    pub pni_signature_verified: bool,
    #[prost(message, optional, tag = "22")]
    pub nickname: ::core::option::Option<contact_record::Name>,
    #[prost(string, tag = "23")]
    pub note: ::prost::alloc::string::String,
    #[prost(enumeration = "AvatarColor", optional, tag = "24")]
    pub avatar_color: ::core::option::Option<i32>,
    /// 16-byte UUID
    #[prost(bytes = "vec", tag = "25")]
    pub aci_binary: ::prost::alloc::vec::Vec<u8>,
    /// 16-byte UUID
    #[prost(bytes = "vec", tag = "26")]
    pub pni_binary: ::prost::alloc::vec::Vec<u8>,
}
/// Nested message and enum types in `ContactRecord`.
pub mod contact_record {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Name {
        #[prost(string, tag = "1")]
        pub given: ::prost::alloc::string::String,
        #[prost(string, tag = "2")]
        pub family: ::prost::alloc::string::String,
    }
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum IdentityState {
        Default = 0,
        Verified = 1,
        Unverified = 2,
    }
    impl IdentityState {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Default => "DEFAULT",
                Self::Verified => "VERIFIED",
                Self::Unverified => "UNVERIFIED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "DEFAULT" => Some(Self::Default),
                "VERIFIED" => Some(Self::Verified),
                "UNVERIFIED" => Some(Self::Unverified),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupV1Record {
    #[prost(bytes = "vec", tag = "1")]
    pub id: ::prost::alloc::vec::Vec<u8>,
    #[prost(bool, tag = "2")]
    pub blocked: bool,
    #[prost(bool, tag = "3")]
    pub whitelisted: bool,
    #[prost(bool, tag = "4")]
    pub archived: bool,
    #[prost(bool, tag = "5")]
    pub marked_unread: bool,
    #[prost(uint64, tag = "6")]
    pub muted_until_timestamp: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupV2Record {
    #[prost(bytes = "vec", tag = "1")]
    pub master_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bool, tag = "2")]
    pub blocked: bool,
    #[prost(bool, tag = "3")]
    pub whitelisted: bool,
    #[prost(bool, tag = "4")]
    pub archived: bool,
    #[prost(bool, tag = "5")]
    pub marked_unread: bool,
    #[prost(uint64, tag = "6")]
    pub muted_until_timestamp: u64,
    #[prost(bool, tag = "7")]
    pub dont_notify_for_mentions_if_muted: bool,
    #[prost(bool, tag = "8")]
    pub hide_story: bool,
    #[prost(enumeration = "group_v2_record::StorySendMode", tag = "10")]
    pub story_send_mode: i32,
    #[prost(enumeration = "AvatarColor", optional, tag = "11")]
    pub avatar_color: ::core::option::Option<i32>,
}
/// Nested message and enum types in `GroupV2Record`.
pub mod group_v2_record {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum StorySendMode {
        Default = 0,
        Disabled = 1,
        Enabled = 2,
    }
    impl StorySendMode {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Default => "DEFAULT",
                Self::Disabled => "DISABLED",
                Self::Enabled => "ENABLED",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "DEFAULT" => Some(Self::Default),
                "DISABLED" => Some(Self::Disabled),
                "ENABLED" => Some(Self::Enabled),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Payments {
    #[prost(bool, tag = "1")]
    pub enabled: bool,
    #[prost(bytes = "vec", tag = "2")]
    pub entropy: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AccountRecord {
    #[prost(bytes = "vec", tag = "1")]
    pub profile_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(string, tag = "2")]
    pub given_name: ::prost::alloc::string::String,
    #[prost(string, tag = "3")]
    pub family_name: ::prost::alloc::string::String,
    #[prost(string, tag = "4")]
    pub avatar_url_path: ::prost::alloc::string::String,
    #[prost(bool, tag = "5")]
    pub note_to_self_archived: bool,
    #[prost(bool, tag = "6")]
    pub read_receipts: bool,
    #[prost(bool, tag = "7")]
    pub sealed_sender_indicators: bool,
    #[prost(bool, tag = "8")]
    pub typing_indicators: bool,
    #[prost(bool, tag = "10")]
    pub note_to_self_marked_unread: bool,
    #[prost(bool, tag = "11")]
    pub link_previews: bool,
    #[prost(enumeration = "account_record::PhoneNumberSharingMode", tag = "12")]
    pub phone_number_sharing_mode: i32,
    #[prost(bool, tag = "13")]
    pub unlisted_phone_number: bool,
    #[prost(message, repeated, tag = "14")]
    pub pinned_conversations: ::prost::alloc::vec::Vec<
        account_record::PinnedConversation,
    >,
    #[prost(bool, tag = "15")]
    pub prefer_contact_avatars: bool,
    #[prost(message, optional, tag = "16")]
    pub payments: ::core::option::Option<Payments>,
    #[prost(uint32, tag = "17")]
    pub universal_expire_timer: u32,
    #[prost(bool, tag = "18")]
    pub primary_sends_sms: bool,
    #[prost(string, repeated, tag = "20")]
    pub preferred_reaction_emoji: ::prost::alloc::vec::Vec<
        ::prost::alloc::string::String,
    >,
    #[prost(bytes = "vec", tag = "21")]
    pub subscriber_id: ::prost::alloc::vec::Vec<u8>,
    #[prost(string, tag = "22")]
    pub subscriber_currency_code: ::prost::alloc::string::String,
    #[prost(bool, tag = "23")]
    pub display_badges_on_profile: bool,
    #[prost(bool, tag = "24")]
    pub subscription_manually_cancelled: bool,
    #[prost(bool, tag = "25")]
    pub keep_muted_chats_archived: bool,
    #[prost(bool, tag = "26")]
    pub has_set_my_stories_privacy: bool,
    #[prost(bool, tag = "27")]
    pub has_viewed_onboarding_story: bool,
    #[prost(bool, tag = "29")]
    pub stories_disabled: bool,
    #[prost(enumeration = "OptionalBool", tag = "30")]
    pub story_view_receipts_enabled: i32,
    #[prost(bool, tag = "32")]
    pub has_seen_group_story_education_sheet: bool,
    #[prost(string, tag = "33")]
    pub username: ::prost::alloc::string::String,
    #[prost(bool, tag = "34")]
    pub has_completed_username_onboarding: bool,
    #[prost(message, optional, tag = "35")]
    pub username_link: ::core::option::Option<account_record::UsernameLink>,
    /// Set to true after backups are enabled and one is uploaded.
    #[prost(bool, optional, tag = "39")]
    pub has_backup: ::core::option::Option<bool>,
    /// See zkgroup for integer particular values. Unset if backups are not enabled.
    #[prost(uint64, optional, tag = "40")]
    pub backup_tier: ::core::option::Option<u64>,
    #[prost(message, optional, tag = "41")]
    pub backup_subscriber_data: ::core::option::Option<
        account_record::IapSubscriberData,
    >,
    #[prost(enumeration = "AvatarColor", optional, tag = "42")]
    pub avatar_color: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "43")]
    pub backup_tier_history: ::core::option::Option<account_record::BackupTierHistory>,
    #[prost(message, optional, tag = "44")]
    pub notification_profile_manual_override: ::core::option::Option<
        account_record::NotificationProfileManualOverride,
    >,
    #[prost(bool, tag = "45")]
    pub notification_profile_sync_disabled: bool,
    #[prost(bool, tag = "46")]
    pub automatic_key_verification_disabled: bool,
    #[prost(bool, tag = "47")]
    pub has_seen_admin_delete_education_dialog: bool,
}
/// Nested message and enum types in `AccountRecord`.
pub mod account_record {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct PinnedConversation {
        #[prost(oneof = "pinned_conversation::Identifier", tags = "1, 3, 4")]
        pub identifier: ::core::option::Option<pinned_conversation::Identifier>,
    }
    /// Nested message and enum types in `PinnedConversation`.
    pub mod pinned_conversation {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct Contact {
            #[prost(string, tag = "1")]
            pub service_id: ::prost::alloc::string::String,
            #[prost(string, tag = "2")]
            pub e164: ::prost::alloc::string::String,
            /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
            #[prost(bytes = "vec", tag = "3")]
            pub service_id_binary: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
        pub enum Identifier {
            #[prost(message, tag = "1")]
            Contact(Contact),
            #[prost(bytes, tag = "3")]
            LegacyGroupId(::prost::alloc::vec::Vec<u8>),
            #[prost(bytes, tag = "4")]
            GroupMasterKey(::prost::alloc::vec::Vec<u8>),
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct UsernameLink {
        /// 32 bytes of entropy used for encryption
        #[prost(bytes = "vec", tag = "1")]
        pub entropy: ::prost::alloc::vec::Vec<u8>,
        /// 16 bytes of encoded UUID provided by the server
        #[prost(bytes = "vec", tag = "2")]
        pub server_id: ::prost::alloc::vec::Vec<u8>,
        #[prost(enumeration = "username_link::Color", tag = "3")]
        pub color: i32,
    }
    /// Nested message and enum types in `UsernameLink`.
    pub mod username_link {
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum Color {
            Unknown = 0,
            Blue = 1,
            White = 2,
            Grey = 3,
            Olive = 4,
            Green = 5,
            Orange = 6,
            Pink = 7,
            Purple = 8,
        }
        impl Color {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Unknown => "UNKNOWN",
                    Self::Blue => "BLUE",
                    Self::White => "WHITE",
                    Self::Grey => "GREY",
                    Self::Olive => "OLIVE",
                    Self::Green => "GREEN",
                    Self::Orange => "ORANGE",
                    Self::Pink => "PINK",
                    Self::Purple => "PURPLE",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "UNKNOWN" => Some(Self::Unknown),
                    "BLUE" => Some(Self::Blue),
                    "WHITE" => Some(Self::White),
                    "GREY" => Some(Self::Grey),
                    "OLIVE" => Some(Self::Olive),
                    "GREEN" => Some(Self::Green),
                    "ORANGE" => Some(Self::Orange),
                    "PINK" => Some(Self::Pink),
                    "PURPLE" => Some(Self::Purple),
                    _ => None,
                }
            }
        }
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct IapSubscriberData {
        #[prost(bytes = "vec", tag = "1")]
        pub subscriber_id: ::prost::alloc::vec::Vec<u8>,
        #[prost(oneof = "iap_subscriber_data::IapSubscriptionId", tags = "2, 3")]
        pub iap_subscription_id: ::core::option::Option<
            iap_subscriber_data::IapSubscriptionId,
        >,
    }
    /// Nested message and enum types in `IAPSubscriberData`.
    pub mod iap_subscriber_data {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
        pub enum IapSubscriptionId {
            /// Identifies an Android Play Store IAP subscription.
            #[prost(string, tag = "2")]
            PurchaseToken(::prost::alloc::string::String),
            /// Identifies an iOS App Store IAP subscription.
            #[prost(uint64, tag = "3")]
            OriginalTransactionId(u64),
        }
    }
    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct BackupTierHistory {
        /// See zkgroup for integer particular values. Unset if backups are not enabled.
        #[prost(uint64, optional, tag = "1")]
        pub backup_tier: ::core::option::Option<u64>,
        #[prost(uint64, optional, tag = "2")]
        pub ended_at_timestamp: ::core::option::Option<u64>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct NotificationProfileManualOverride {
        #[prost(oneof = "notification_profile_manual_override::Override", tags = "1, 2")]
        pub r#override: ::core::option::Option<
            notification_profile_manual_override::Override,
        >,
    }
    /// Nested message and enum types in `NotificationProfileManualOverride`.
    pub mod notification_profile_manual_override {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ManuallyEnabled {
            #[prost(bytes = "vec", tag = "1")]
            pub id: ::prost::alloc::vec::Vec<u8>,
            /// This will be unset if no timespan was chosen in the UI.
            #[prost(uint64, tag = "3")]
            pub end_at_timestamp_ms: u64,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
        pub enum Override {
            #[prost(uint64, tag = "1")]
            DisabledAtTimestampMs(u64),
            #[prost(message, tag = "2")]
            Enabled(ManuallyEnabled),
        }
    }
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum PhoneNumberSharingMode {
        Unknown = 0,
        Everybody = 1,
        Nobody = 2,
    }
    impl PhoneNumberSharingMode {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unknown => "UNKNOWN",
                Self::Everybody => "EVERYBODY",
                Self::Nobody => "NOBODY",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "UNKNOWN" => Some(Self::Unknown),
                "EVERYBODY" => Some(Self::Everybody),
                "NOBODY" => Some(Self::Nobody),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StoryDistributionListRecord {
    #[prost(bytes = "vec", tag = "1")]
    pub identifier: ::prost::alloc::vec::Vec<u8>,
    #[prost(string, tag = "2")]
    pub name: ::prost::alloc::string::String,
    #[prost(string, repeated, tag = "3")]
    pub recipient_service_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(uint64, tag = "4")]
    pub deleted_at_timestamp: u64,
    #[prost(bool, tag = "5")]
    pub allows_replies: bool,
    #[prost(bool, tag = "6")]
    pub is_block_list: bool,
    /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
    #[prost(bytes = "vec", repeated, tag = "7")]
    pub recipient_service_ids_binary: ::prost::alloc::vec::Vec<
        ::prost::alloc::vec::Vec<u8>,
    >,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CallLinkRecord {
    #[prost(bytes = "vec", tag = "1")]
    pub root_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "2")]
    pub admin_passkey: ::prost::alloc::vec::Vec<u8>,
    #[prost(uint64, tag = "3")]
    pub deleted_at_timestamp_ms: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Recipient {
    #[prost(oneof = "recipient::Identifier", tags = "1, 2, 3")]
    pub identifier: ::core::option::Option<recipient::Identifier>,
}
/// Nested message and enum types in `Recipient`.
pub mod recipient {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct Contact {
        #[prost(string, tag = "1")]
        pub service_id: ::prost::alloc::string::String,
        #[prost(string, tag = "2")]
        pub e164: ::prost::alloc::string::String,
        /// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
        #[prost(bytes = "vec", tag = "3")]
        pub service_id_binary: ::prost::alloc::vec::Vec<u8>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Identifier {
        #[prost(message, tag = "1")]
        Contact(Contact),
        #[prost(bytes, tag = "2")]
        LegacyGroupId(::prost::alloc::vec::Vec<u8>),
        #[prost(bytes, tag = "3")]
        GroupMasterKey(::prost::alloc::vec::Vec<u8>),
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ChatFolderRecord {
    #[prost(bytes = "vec", tag = "1")]
    pub identifier: ::prost::alloc::vec::Vec<u8>,
    #[prost(string, tag = "2")]
    pub name: ::prost::alloc::string::String,
    #[prost(uint32, tag = "3")]
    pub position: u32,
    #[prost(bool, tag = "4")]
    pub show_only_unread: bool,
    #[prost(bool, tag = "5")]
    pub show_muted_chats: bool,
    /// Folder includes all 1:1 chats, unless excluded
    #[prost(bool, tag = "6")]
    pub include_all_individual_chats: bool,
    /// Folder includes all group chats, unless excluded
    #[prost(bool, tag = "7")]
    pub include_all_group_chats: bool,
    #[prost(enumeration = "chat_folder_record::FolderType", tag = "8")]
    pub folder_type: i32,
    #[prost(message, repeated, tag = "9")]
    pub included_recipients: ::prost::alloc::vec::Vec<Recipient>,
    #[prost(message, repeated, tag = "10")]
    pub excluded_recipients: ::prost::alloc::vec::Vec<Recipient>,
    /// When non-zero, `position` should be set to -1 and includedRecipients should be empty
    #[prost(uint64, tag = "11")]
    pub deleted_at_timestamp_ms: u64,
}
/// Nested message and enum types in `ChatFolderRecord`.
pub mod chat_folder_record {
    /// Represents the default "All chats" folder record vs all other custom folders
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum FolderType {
        Unknown = 0,
        All = 1,
        Custom = 2,
    }
    impl FolderType {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unknown => "UNKNOWN",
                Self::All => "ALL",
                Self::Custom => "CUSTOM",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "UNKNOWN" => Some(Self::Unknown),
                "ALL" => Some(Self::All),
                "CUSTOM" => Some(Self::Custom),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NotificationProfile {
    #[prost(bytes = "vec", tag = "1")]
    pub id: ::prost::alloc::vec::Vec<u8>,
    #[prost(string, tag = "2")]
    pub name: ::prost::alloc::string::String,
    #[prost(string, optional, tag = "3")]
    pub emoji: ::core::option::Option<::prost::alloc::string::String>,
    /// 0xAARRGGBB
    #[prost(fixed32, tag = "4")]
    pub color: u32,
    #[prost(uint64, tag = "5")]
    pub created_at_ms: u64,
    #[prost(bool, tag = "6")]
    pub allow_all_calls: bool,
    #[prost(bool, tag = "7")]
    pub allow_all_mentions: bool,
    #[prost(message, repeated, tag = "8")]
    pub allowed_members: ::prost::alloc::vec::Vec<Recipient>,
    #[prost(bool, tag = "9")]
    pub schedule_enabled: bool,
    /// 24-hour clock int, 0000-2359 (e.g., 15, 900, 1130, 2345)
    #[prost(uint32, tag = "10")]
    pub schedule_start_time: u32,
    /// 24-hour clock int, 0000-2359 (e.g., 15, 900, 1130, 2345)
    #[prost(uint32, tag = "11")]
    pub schedule_end_time: u32,
    #[prost(enumeration = "notification_profile::DayOfWeek", repeated, tag = "12")]
    pub schedule_days_enabled: ::prost::alloc::vec::Vec<i32>,
    #[prost(uint64, tag = "13")]
    pub deleted_at_timestamp_ms: u64,
}
/// Nested message and enum types in `NotificationProfile`.
pub mod notification_profile {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum DayOfWeek {
        /// Interpret as "Monday"
        Unknown = 0,
        Monday = 1,
        Tuesday = 2,
        Wednesday = 3,
        Thursday = 4,
        Friday = 5,
        Saturday = 6,
        Sunday = 7,
    }
    impl DayOfWeek {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unknown => "UNKNOWN",
                Self::Monday => "MONDAY",
                Self::Tuesday => "TUESDAY",
                Self::Wednesday => "WEDNESDAY",
                Self::Thursday => "THURSDAY",
                Self::Friday => "FRIDAY",
                Self::Saturday => "SATURDAY",
                Self::Sunday => "SUNDAY",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "UNKNOWN" => Some(Self::Unknown),
                "MONDAY" => Some(Self::Monday),
                "TUESDAY" => Some(Self::Tuesday),
                "WEDNESDAY" => Some(Self::Wednesday),
                "THURSDAY" => Some(Self::Thursday),
                "FRIDAY" => Some(Self::Friday),
                "SATURDAY" => Some(Self::Saturday),
                "SUNDAY" => Some(Self::Sunday),
                _ => None,
            }
        }
    }
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum OptionalBool {
    Unset = 0,
    Enabled = 1,
    Disabled = 2,
}
impl OptionalBool {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Unset => "UNSET",
            Self::Enabled => "ENABLED",
            Self::Disabled => "DISABLED",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "UNSET" => Some(Self::Unset),
            "ENABLED" => Some(Self::Enabled),
            "DISABLED" => Some(Self::Disabled),
            _ => None,
        }
    }
}
/// If unset - computed as the value of the first byte of SHA-256(msg=CONTACT_ID)
/// modulo the count of colors. Once set the avatar color for a recipient is
/// never recomputed or changed.
///
/// `CONTACT_ID` is the first available identifier from the list:
/// - ServiceIdToBinary(ACI)
/// - E164
/// - ServiceIdToBinary(PNI)
/// - Group Id
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum AvatarColor {
    A100 = 0,
    A110 = 1,
    A120 = 2,
    A130 = 3,
    A140 = 4,
    A150 = 5,
    A160 = 6,
    A170 = 7,
    A180 = 8,
    A190 = 9,
    A200 = 10,
    A210 = 11,
}
impl AvatarColor {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::A100 => "A100",
            Self::A110 => "A110",
            Self::A120 => "A120",
            Self::A130 => "A130",
            Self::A140 => "A140",
            Self::A150 => "A150",
            Self::A160 => "A160",
            Self::A170 => "A170",
            Self::A180 => "A180",
            Self::A190 => "A190",
            Self::A200 => "A200",
            Self::A210 => "A210",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "A100" => Some(Self::A100),
            "A110" => Some(Self::A110),
            "A120" => Some(Self::A120),
            "A130" => Some(Self::A130),
            "A140" => Some(Self::A140),
            "A150" => Some(Self::A150),
            "A160" => Some(Self::A160),
            "A170" => Some(Self::A170),
            "A180" => Some(Self::A180),
            "A190" => Some(Self::A190),
            "A200" => Some(Self::A200),
            "A210" => Some(Self::A210),
            _ => None,
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct WebSocketRequestMessage {
    #[prost(string, optional, tag = "1")]
    pub verb: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, optional, tag = "2")]
    pub path: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "3")]
    pub body: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
    #[prost(string, repeated, tag = "5")]
    pub headers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(uint64, optional, tag = "4")]
    pub id: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct WebSocketResponseMessage {
    #[prost(uint64, optional, tag = "1")]
    pub id: ::core::option::Option<u64>,
    #[prost(uint32, optional, tag = "2")]
    pub status: ::core::option::Option<u32>,
    #[prost(string, optional, tag = "3")]
    pub message: ::core::option::Option<::prost::alloc::string::String>,
    #[prost(string, repeated, tag = "5")]
    pub headers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    #[prost(bytes = "vec", optional, tag = "4")]
    pub body: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct WebSocketMessage {
    #[prost(enumeration = "web_socket_message::Type", optional, tag = "1")]
    pub r#type: ::core::option::Option<i32>,
    #[prost(message, optional, tag = "2")]
    pub request: ::core::option::Option<WebSocketRequestMessage>,
    #[prost(message, optional, tag = "3")]
    pub response: ::core::option::Option<WebSocketResponseMessage>,
}
/// Nested message and enum types in `WebSocketMessage`.
pub mod web_socket_message {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Type {
        Unknown = 0,
        Request = 1,
        Response = 2,
    }
    impl Type {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Unknown => "UNKNOWN",
                Self::Request => "REQUEST",
                Self::Response => "RESPONSE",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "UNKNOWN" => Some(Self::Unknown),
                "REQUEST" => Some(Self::Request),
                "RESPONSE" => Some(Self::Response),
                _ => None,
            }
        }
    }
}
