// This file is @generated by prost-build.
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ServiceIdentifier {
    /// The type of identity represented by this service identifier.
    #[prost(enumeration = "IdentityType", tag = "1")]
    pub identity_type: i32,
    /// The UUID of the identity represented by this service identifier.
    #[prost(bytes = "vec", tag = "2")]
    pub uuid: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AccountIdentifiers {
    /// A list of service identifiers for the identified account.
    #[prost(message, repeated, tag = "1")]
    pub service_identifiers: ::prost::alloc::vec::Vec<ServiceIdentifier>,
    /// The phone number associated with the identified account.
    #[prost(string, tag = "2")]
    pub e164: ::prost::alloc::string::String,
    /// The username hash (if any) associated with the identified account. May be
    /// empty if no username is associated with the identified account.
    #[prost(bytes = "vec", tag = "3")]
    pub username_hash: ::prost::alloc::vec::Vec<u8>,
    /// The username link handle UUID associated with the identified account.
    /// May be empty if no username is associated with the identified account.
    #[prost(bytes = "vec", tag = "4")]
    pub username_link_handle: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EcPreKey {
    /// A locally-unique identifier for this key, which will be provided by
    /// peers using this key to encrypt messages so the private key can be looked
    /// up.
    #[prost(int32, tag = "1")]
    pub key_id: i32,
    /// The public key, serialized in libsignal's elliptic-curve public key format.
    #[prost(bytes = "vec", tag = "2")]
    pub public_key: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EcSignedPreKey {
    /// A locally-unique identifier for this key, which will be provided by
    /// peers using this key to encrypt messages so the private key can be looked
    /// up.
    #[prost(int32, tag = "1")]
    pub key_id: i32,
    /// The public key, serialized in libsignal's elliptic-curve public key format.
    #[prost(bytes = "vec", tag = "2")]
    pub public_key: ::prost::alloc::vec::Vec<u8>,
    /// A signature of the public key, verifiable with the identity key for the
    /// account/identity associated with this pre-key.
    #[prost(bytes = "vec", tag = "3")]
    pub signature: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct KemSignedPreKey {
    /// An locally-unique identifier for this key, which will be provided by peers
    /// using this key to encrypt messages so the private key can be looked up.
    #[prost(int32, tag = "1")]
    pub key_id: i32,
    /// The public key, serialized in libsignal's Kyber1024 public key format.
    #[prost(bytes = "vec", tag = "2")]
    pub public_key: ::prost::alloc::vec::Vec<u8>,
    /// A signature of the public key, verifiable with the identity key for the
    /// account/identity associated with this pre-key.
    #[prost(bytes = "vec", tag = "3")]
    pub signature: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ZkCredential {
    ///
    /// Day on which this credential can be redeemed, in UTC seconds since epoch
    #[prost(int64, tag = "1")]
    pub redemption_time: i64,
    ///
    /// The ZK credential, using libsignal's serialization
    #[prost(bytes = "vec", tag = "2")]
    pub credential: ::prost::alloc::vec::Vec<u8>,
}
/// An upload location and credentials which may be used to upload an object
/// to an external CDN
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UploadForm {
    /// Indicates the CDN type. 3 indicates resumable uploads using TUS
    #[prost(uint32, tag = "1")]
    pub cdn: u32,
    /// The location within the specified cdn where the finished upload can be found
    #[prost(string, tag = "2")]
    pub key: ::prost::alloc::string::String,
    /// A map of headers to include with all upload requests. Potentially contains
    /// time-limited upload credentials
    #[prost(map = "string, string", tag = "3")]
    pub headers: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        ::prost::alloc::string::String,
    >,
    /// The URL to upload to with the appropriate protocol
    #[prost(string, tag = "4")]
    pub signed_upload_location: ::prost::alloc::string::String,
}
/// An upload location, credentials, and metadata which may be used to upload an
/// object to AWS S3
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct S3UploadForm {
    /// The S3 key (i.e. path and filename) for the uploaded file.
    #[prost(string, tag = "1")]
    pub key: ::prost::alloc::string::String,
    /// A scoped credential. Includes the AWS access key, date, region targeted,
    /// and AWS service.
    #[prost(string, tag = "2")]
    pub credential: ::prost::alloc::string::String,
    /// The type of access control for the uploaded file.
    #[prost(string, tag = "3")]
    pub acl: ::prost::alloc::string::String,
    /// The algorithm used to calculate a signature on the S3 policy.
    #[prost(string, tag = "4")]
    pub algorithm: ::prost::alloc::string::String,
    /// The timestamp (formatted as "yyyyMMdd'T'HHmmssX") at which the S3 policy
    /// and signature were generated.
    #[prost(string, tag = "5")]
    pub date: ::prost::alloc::string::String,
    /// The S3 policy (as a base64-encoded JSON string) used to upload the file.
    #[prost(string, tag = "6")]
    pub policy: ::prost::alloc::string::String,
    /// A digital signature (formatted as a hex string) on the S3 policy.
    #[prost(string, tag = "7")]
    pub signature: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BadgeSvg {
    /// File name of the scalable vector graphic for light mode.
    #[prost(string, tag = "1")]
    pub light: ::prost::alloc::string::String,
    /// File name of the scalable vector graphic for dark mode.
    #[prost(string, tag = "2")]
    pub dark: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Badge {
    /// An ID that uniquely identifies the badge.
    #[prost(string, tag = "1")]
    pub id: ::prost::alloc::string::String,
    /// The category the badge falls in ("donor" or "other").
    #[prost(string, tag = "2")]
    pub category: ::prost::alloc::string::String,
    /// The badge name.
    #[prost(string, tag = "3")]
    pub name: ::prost::alloc::string::String,
    /// The badge description.
    #[prost(string, tag = "4")]
    pub description: ::prost::alloc::string::String,
    /// Different size badge SVG files.
    #[prost(string, repeated, tag = "5")]
    pub sprites6: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    /// File name of the scalable vector graphic representing this badge.
    #[prost(string, tag = "6")]
    pub svg: ::prost::alloc::string::String,
    /// Pairs of light/dark SVG files designed for display at different sizes.
    #[prost(message, repeated, tag = "7")]
    pub svgs: ::prost::alloc::vec::Vec<BadgeSvg>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum IdentityType {
    Unspecified = 0,
    Aci = 1,
    Pni = 2,
}
impl IdentityType {
    /// 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::Unspecified => "IDENTITY_TYPE_UNSPECIFIED",
            Self::Aci => "IDENTITY_TYPE_ACI",
            Self::Pni => "IDENTITY_TYPE_PNI",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "IDENTITY_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
            "IDENTITY_TYPE_ACI" => Some(Self::Aci),
            "IDENTITY_TYPE_PNI" => Some(Self::Pni),
            _ => None,
        }
    }
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum DeviceCapability {
    Unspecified = 0,
    Storage = 1,
    Transfer = 2,
    AttachmentBackfill = 6,
    SparsePostQuantumRatchet = 7,
    ProfilesV2 = 8,
    UsernameChangeSyncMessage = 9,
}
impl DeviceCapability {
    /// 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::Unspecified => "DEVICE_CAPABILITY_UNSPECIFIED",
            Self::Storage => "DEVICE_CAPABILITY_STORAGE",
            Self::Transfer => "DEVICE_CAPABILITY_TRANSFER",
            Self::AttachmentBackfill => "DEVICE_CAPABILITY_ATTACHMENT_BACKFILL",
            Self::SparsePostQuantumRatchet => {
                "DEVICE_CAPABILITY_SPARSE_POST_QUANTUM_RATCHET"
            }
            Self::ProfilesV2 => "DEVICE_CAPABILITY_PROFILES_V2",
            Self::UsernameChangeSyncMessage => {
                "DEVICE_CAPABILITY_USERNAME_CHANGE_SYNC_MESSAGE"
            }
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "DEVICE_CAPABILITY_UNSPECIFIED" => Some(Self::Unspecified),
            "DEVICE_CAPABILITY_STORAGE" => Some(Self::Storage),
            "DEVICE_CAPABILITY_TRANSFER" => Some(Self::Transfer),
            "DEVICE_CAPABILITY_ATTACHMENT_BACKFILL" => Some(Self::AttachmentBackfill),
            "DEVICE_CAPABILITY_SPARSE_POST_QUANTUM_RATCHET" => {
                Some(Self::SparsePostQuantumRatchet)
            }
            "DEVICE_CAPABILITY_PROFILES_V2" => Some(Self::ProfilesV2),
            "DEVICE_CAPABILITY_USERNAME_CHANGE_SYNC_MESSAGE" => {
                Some(Self::UsernameChangeSyncMessage)
            }
            _ => None,
        }
    }
}
