// This file is @generated by prost-build.
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AvatarUploadAttributes {
    #[prost(string, tag = "1")]
    pub key: ::prost::alloc::string::String,
    #[prost(string, tag = "2")]
    pub credential: ::prost::alloc::string::String,
    #[prost(string, tag = "3")]
    pub acl: ::prost::alloc::string::String,
    #[prost(string, tag = "4")]
    pub algorithm: ::prost::alloc::string::String,
    #[prost(string, tag = "5")]
    pub date: ::prost::alloc::string::String,
    #[prost(string, tag = "6")]
    pub policy: ::prost::alloc::string::String,
    #[prost(string, tag = "7")]
    pub signature: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Member {
    #[prost(bytes = "vec", tag = "1")]
    pub user_id: ::prost::alloc::vec::Vec<u8>,
    #[prost(enumeration = "member::Role", tag = "2")]
    pub role: i32,
    #[prost(bytes = "vec", tag = "3")]
    pub profile_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "4")]
    pub presentation: ::prost::alloc::vec::Vec<u8>,
    #[prost(uint32, tag = "5")]
    pub joined_at_version: u32,
    /// decrypts to a UTF-8 string
    #[prost(bytes = "vec", tag = "6")]
    pub label_emoji: ::prost::alloc::vec::Vec<u8>,
    /// decrypts to a UTF-8 string
    #[prost(bytes = "vec", tag = "7")]
    pub label_string: ::prost::alloc::vec::Vec<u8>,
}
/// Nested message and enum types in `Member`.
pub mod member {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum Role {
        Unknown = 0,
        Default = 1,
        Administrator = 2,
    }
    impl Role {
        /// 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::Default => "DEFAULT",
                Self::Administrator => "ADMINISTRATOR",
            }
        }
        /// 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),
                "DEFAULT" => Some(Self::Default),
                "ADMINISTRATOR" => Some(Self::Administrator),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MemberPendingProfileKey {
    #[prost(message, optional, tag = "1")]
    pub member: ::core::option::Option<Member>,
    #[prost(bytes = "vec", tag = "2")]
    pub added_by_user_id: ::prost::alloc::vec::Vec<u8>,
    /// ms since epoch
    #[prost(uint64, tag = "3")]
    pub timestamp: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MemberPendingAdminApproval {
    #[prost(bytes = "vec", tag = "1")]
    pub user_id: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "2")]
    pub profile_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "3")]
    pub presentation: ::prost::alloc::vec::Vec<u8>,
    /// ms since epoch
    #[prost(uint64, tag = "4")]
    pub timestamp: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MemberBanned {
    #[prost(bytes = "vec", tag = "1")]
    pub user_id: ::prost::alloc::vec::Vec<u8>,
    /// ms since epoch
    #[prost(uint64, tag = "2")]
    pub timestamp: u64,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AccessControl {
    #[prost(enumeration = "access_control::AccessRequired", tag = "1")]
    pub attributes: i32,
    #[prost(enumeration = "access_control::AccessRequired", tag = "2")]
    pub members: i32,
    #[prost(enumeration = "access_control::AccessRequired", tag = "3")]
    pub add_from_invite_link: i32,
    #[prost(enumeration = "access_control::AccessRequired", tag = "4")]
    pub member_label: i32,
}
/// Nested message and enum types in `AccessControl`.
pub mod access_control {
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum AccessRequired {
        Unknown = 0,
        Any = 1,
        Member = 2,
        Administrator = 3,
        Unsatisfiable = 4,
    }
    impl AccessRequired {
        /// 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::Any => "ANY",
                Self::Member => "MEMBER",
                Self::Administrator => "ADMINISTRATOR",
                Self::Unsatisfiable => "UNSATISFIABLE",
            }
        }
        /// 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),
                "ANY" => Some(Self::Any),
                "MEMBER" => Some(Self::Member),
                "ADMINISTRATOR" => Some(Self::Administrator),
                "UNSATISFIABLE" => Some(Self::Unsatisfiable),
                _ => None,
            }
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Group {
    #[prost(bytes = "vec", tag = "1")]
    pub public_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "2")]
    pub title: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "11")]
    pub description: ::prost::alloc::vec::Vec<u8>,
    /// The URL for this group's avatar. The content at this URL can be
    /// decrypted/deserialized into a `GroupAttributeBlob`.
    #[prost(string, tag = "3")]
    pub avatar_url: ::prost::alloc::string::String,
    #[prost(bytes = "vec", tag = "4")]
    pub disappearing_messages_timer: ::prost::alloc::vec::Vec<u8>,
    #[prost(message, optional, tag = "5")]
    pub access_control: ::core::option::Option<AccessControl>,
    #[prost(uint32, tag = "6")]
    pub version: u32,
    #[prost(message, repeated, tag = "7")]
    pub members: ::prost::alloc::vec::Vec<Member>,
    #[prost(message, repeated, tag = "8")]
    pub members_pending_profile_key: ::prost::alloc::vec::Vec<MemberPendingProfileKey>,
    #[prost(message, repeated, tag = "9")]
    pub members_pending_admin_approval: ::prost::alloc::vec::Vec<
        MemberPendingAdminApproval,
    >,
    #[prost(bytes = "vec", tag = "10")]
    pub invite_link_password: ::prost::alloc::vec::Vec<u8>,
    #[prost(bool, tag = "12")]
    pub announcements_only: bool,
    /// next: 14
    #[prost(message, repeated, tag = "13")]
    pub members_banned: ::prost::alloc::vec::Vec<MemberBanned>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupAttributeBlob {
    #[prost(oneof = "group_attribute_blob::Content", tags = "1, 2, 3, 4")]
    pub content: ::core::option::Option<group_attribute_blob::Content>,
}
/// Nested message and enum types in `GroupAttributeBlob`.
pub mod group_attribute_blob {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Content {
        #[prost(string, tag = "1")]
        Title(::prost::alloc::string::String),
        #[prost(bytes, tag = "2")]
        Avatar(::prost::alloc::vec::Vec<u8>),
        #[prost(uint32, tag = "3")]
        DisappearingMessagesDuration(u32),
        #[prost(string, tag = "4")]
        DescriptionText(::prost::alloc::string::String),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupInviteLink {
    #[prost(oneof = "group_invite_link::Contents", tags = "1")]
    pub contents: ::core::option::Option<group_invite_link::Contents>,
}
/// Nested message and enum types in `GroupInviteLink`.
pub mod group_invite_link {
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
    pub struct GroupInviteLinkContentsV1 {
        #[prost(bytes = "vec", tag = "1")]
        pub group_master_key: ::prost::alloc::vec::Vec<u8>,
        #[prost(bytes = "vec", tag = "2")]
        pub invite_link_password: ::prost::alloc::vec::Vec<u8>,
    }
    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
    pub enum Contents {
        #[prost(message, tag = "1")]
        ContentsV1(GroupInviteLinkContentsV1),
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupJoinInfo {
    #[prost(bytes = "vec", tag = "1")]
    pub public_key: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "2")]
    pub title: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "8")]
    pub description: ::prost::alloc::vec::Vec<u8>,
    #[prost(string, tag = "3")]
    pub avatar: ::prost::alloc::string::String,
    #[prost(uint32, tag = "4")]
    pub member_count: u32,
    #[prost(enumeration = "access_control::AccessRequired", tag = "5")]
    pub add_from_invite_link: i32,
    #[prost(uint32, tag = "6")]
    pub version: u32,
    /// bool pendingAdminApprovalFull = 9;
    /// next: 10
    #[prost(bool, tag = "7")]
    pub pending_admin_approval: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupChange {
    #[prost(bytes = "vec", tag = "1")]
    pub actions: ::prost::alloc::vec::Vec<u8>,
    #[prost(bytes = "vec", tag = "2")]
    pub server_signature: ::prost::alloc::vec::Vec<u8>,
    #[prost(uint32, tag = "3")]
    pub change_epoch: u32,
}
/// Nested message and enum types in `GroupChange`.
pub mod group_change {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Actions {
        #[prost(bytes = "vec", tag = "1")]
        pub source_user_id: ::prost::alloc::vec::Vec<u8>,
        /// clients should not provide this value; the server will provide it in the response buffer to ensure the signature is binding to a particular group
        /// if clients set it during a request the server will respond with 400.
        #[prost(bytes = "vec", tag = "25")]
        pub group_id: ::prost::alloc::vec::Vec<u8>,
        #[prost(uint32, tag = "2")]
        pub version: u32,
        #[prost(message, repeated, tag = "3")]
        pub add_members: ::prost::alloc::vec::Vec<actions::AddMemberAction>,
        #[prost(message, repeated, tag = "4")]
        pub delete_members: ::prost::alloc::vec::Vec<actions::DeleteMemberAction>,
        #[prost(message, repeated, tag = "5")]
        pub modify_member_roles: ::prost::alloc::vec::Vec<
            actions::ModifyMemberRoleAction,
        >,
        #[prost(message, repeated, tag = "6")]
        pub modify_member_profile_keys: ::prost::alloc::vec::Vec<
            actions::ModifyMemberProfileKeyAction,
        >,
        #[prost(message, repeated, tag = "7")]
        pub add_members_pending_profile_key: ::prost::alloc::vec::Vec<
            actions::AddMemberPendingProfileKeyAction,
        >,
        #[prost(message, repeated, tag = "8")]
        pub delete_members_pending_profile_key: ::prost::alloc::vec::Vec<
            actions::DeleteMemberPendingProfileKeyAction,
        >,
        #[prost(message, repeated, tag = "9")]
        pub promote_members_pending_profile_key: ::prost::alloc::vec::Vec<
            actions::PromoteMemberPendingProfileKeyAction,
        >,
        #[prost(message, optional, tag = "10")]
        pub modify_title: ::core::option::Option<actions::ModifyTitleAction>,
        #[prost(message, optional, tag = "11")]
        pub modify_avatar: ::core::option::Option<actions::ModifyAvatarAction>,
        #[prost(message, optional, tag = "12")]
        pub modify_disappearing_message_timer: ::core::option::Option<
            actions::ModifyDisappearingMessageTimerAction,
        >,
        #[prost(message, optional, tag = "13")]
        pub modify_attributes_access: ::core::option::Option<
            actions::ModifyAttributesAccessControlAction,
        >,
        #[prost(message, optional, tag = "14")]
        pub modify_member_access: ::core::option::Option<
            actions::ModifyMembersAccessControlAction,
        >,
        /// change epoch = 1
        #[prost(message, optional, tag = "15")]
        pub modify_add_from_invite_link_access: ::core::option::Option<
            actions::ModifyAddFromInviteLinkAccessControlAction,
        >,
        /// change epoch = 1
        #[prost(message, repeated, tag = "16")]
        pub add_members_pending_admin_approval: ::prost::alloc::vec::Vec<
            actions::AddMemberPendingAdminApprovalAction,
        >,
        /// change epoch = 1
        #[prost(message, repeated, tag = "17")]
        pub delete_members_pending_admin_approval: ::prost::alloc::vec::Vec<
            actions::DeleteMemberPendingAdminApprovalAction,
        >,
        /// change epoch = 1
        #[prost(message, repeated, tag = "18")]
        pub promote_members_pending_admin_approval: ::prost::alloc::vec::Vec<
            actions::PromoteMemberPendingAdminApprovalAction,
        >,
        /// change epoch = 1
        #[prost(message, optional, tag = "19")]
        pub modify_invite_link_password: ::core::option::Option<
            actions::ModifyInviteLinkPasswordAction,
        >,
        /// change epoch = 2
        #[prost(message, optional, tag = "20")]
        pub modify_description: ::core::option::Option<actions::ModifyDescriptionAction>,
        /// change epoch = 3
        #[prost(message, optional, tag = "21")]
        pub modify_announcements_only: ::core::option::Option<
            actions::ModifyAnnouncementsOnlyAction,
        >,
        /// change epoch = 4
        #[prost(message, repeated, tag = "22")]
        pub add_members_banned: ::prost::alloc::vec::Vec<actions::AddMemberBannedAction>,
        /// change epoch = 4
        #[prost(message, repeated, tag = "23")]
        pub delete_members_banned: ::prost::alloc::vec::Vec<
            actions::DeleteMemberBannedAction,
        >,
        /// change epoch = 5
        #[prost(message, repeated, tag = "24")]
        pub promote_members_pending_pni_aci_profile_key: ::prost::alloc::vec::Vec<
            actions::PromoteMemberPendingPniAciProfileKeyAction,
        >,
        /// change epoch = 6;
        #[prost(message, repeated, tag = "26")]
        pub modify_member_labels: ::prost::alloc::vec::Vec<
            actions::ModifyMemberLabelAction,
        >,
        /// change epoch = 6
        #[prost(message, optional, tag = "27")]
        pub modify_member_label_access: ::core::option::Option<
            actions::ModifyMemberLabelAccessControlAction,
        >,
    }
    /// Nested message and enum types in `Actions`.
    pub mod actions {
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct AddMemberAction {
            #[prost(message, optional, tag = "1")]
            pub added: ::core::option::Option<super::super::Member>,
            #[prost(bool, tag = "2")]
            pub join_from_invite_link: bool,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct DeleteMemberAction {
            #[prost(bytes = "vec", tag = "1")]
            pub deleted_user_id: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyMemberRoleAction {
            #[prost(bytes = "vec", tag = "1")]
            pub user_id: ::prost::alloc::vec::Vec<u8>,
            #[prost(enumeration = "super::super::member::Role", tag = "2")]
            pub role: i32,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyMemberLabelAction {
            #[prost(bytes = "vec", tag = "1")]
            pub user_id: ::prost::alloc::vec::Vec<u8>,
            /// decrypts to a UTF-8 string
            #[prost(bytes = "vec", tag = "2")]
            pub label_emoji: ::prost::alloc::vec::Vec<u8>,
            /// decrypts to a UTF-8 string
            #[prost(bytes = "vec", tag = "3")]
            pub label_string: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyMemberProfileKeyAction {
            #[prost(bytes = "vec", tag = "1")]
            pub presentation: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "2")]
            pub user_id: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "3")]
            pub profile_key: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct AddMemberPendingProfileKeyAction {
            #[prost(message, optional, tag = "1")]
            pub added: ::core::option::Option<super::super::MemberPendingProfileKey>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct DeleteMemberPendingProfileKeyAction {
            #[prost(bytes = "vec", tag = "1")]
            pub deleted_user_id: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct PromoteMemberPendingProfileKeyAction {
            #[prost(bytes = "vec", tag = "1")]
            pub presentation: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "2")]
            pub user_id: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "3")]
            pub profile_key: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct PromoteMemberPendingPniAciProfileKeyAction {
            #[prost(bytes = "vec", tag = "1")]
            pub presentation: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "2")]
            pub user_id: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "3")]
            pub pni: ::prost::alloc::vec::Vec<u8>,
            #[prost(bytes = "vec", tag = "4")]
            pub profile_key: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct AddMemberPendingAdminApprovalAction {
            #[prost(message, optional, tag = "1")]
            pub added: ::core::option::Option<super::super::MemberPendingAdminApproval>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct DeleteMemberPendingAdminApprovalAction {
            #[prost(bytes = "vec", tag = "1")]
            pub deleted_user_id: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct PromoteMemberPendingAdminApprovalAction {
            #[prost(bytes = "vec", tag = "1")]
            pub user_id: ::prost::alloc::vec::Vec<u8>,
            #[prost(enumeration = "super::super::member::Role", tag = "2")]
            pub role: i32,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct AddMemberBannedAction {
            #[prost(message, optional, tag = "1")]
            pub added: ::core::option::Option<super::super::MemberBanned>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct DeleteMemberBannedAction {
            #[prost(bytes = "vec", tag = "1")]
            pub deleted_user_id: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyTitleAction {
            #[prost(bytes = "vec", tag = "1")]
            pub title: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyDescriptionAction {
            #[prost(bytes = "vec", tag = "1")]
            pub description: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyAvatarAction {
            #[prost(string, tag = "1")]
            pub avatar: ::prost::alloc::string::String,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyDisappearingMessageTimerAction {
            #[prost(bytes = "vec", tag = "1")]
            pub timer: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyAttributesAccessControlAction {
            #[prost(
                enumeration = "super::super::access_control::AccessRequired",
                tag = "1"
            )]
            pub attributes_access: i32,
        }
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyMembersAccessControlAction {
            #[prost(
                enumeration = "super::super::access_control::AccessRequired",
                tag = "1"
            )]
            pub members_access: i32,
        }
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyAddFromInviteLinkAccessControlAction {
            #[prost(
                enumeration = "super::super::access_control::AccessRequired",
                tag = "1"
            )]
            pub add_from_invite_link_access: i32,
        }
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyMemberLabelAccessControlAction {
            #[prost(
                enumeration = "super::super::access_control::AccessRequired",
                tag = "1"
            )]
            pub member_label_access: i32,
        }
        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyInviteLinkPasswordAction {
            #[prost(bytes = "vec", tag = "1")]
            pub invite_link_password: ::prost::alloc::vec::Vec<u8>,
        }
        #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
        pub struct ModifyAnnouncementsOnlyAction {
            #[prost(bool, tag = "1")]
            pub announcements_only: bool,
        }
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ExternalGroupCredential {
    #[prost(string, tag = "1")]
    pub token: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GroupResponse {
    #[prost(message, optional, tag = "1")]
    pub group: ::core::option::Option<Group>,
    #[prost(bytes = "vec", tag = "2")]
    pub group_send_endorsements_response: ::prost::alloc::vec::Vec<u8>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GroupChanges {
    #[prost(message, repeated, tag = "1")]
    pub group_changes: ::prost::alloc::vec::Vec<group_changes::GroupChangeState>,
    #[prost(bytes = "vec", tag = "2")]
    pub group_send_endorsements_response: ::prost::alloc::vec::Vec<u8>,
}
/// Nested message and enum types in `GroupChanges`.
pub mod group_changes {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct GroupChangeState {
        #[prost(message, optional, tag = "1")]
        pub group_change: ::core::option::Option<super::GroupChange>,
        #[prost(message, optional, tag = "2")]
        pub group_state: ::core::option::Option<super::Group>,
    }
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GroupChangeResponse {
    #[prost(message, optional, tag = "1")]
    pub group_change: ::core::option::Option<GroupChange>,
    #[prost(bytes = "vec", tag = "2")]
    pub group_send_endorsements_response: ::prost::alloc::vec::Vec<u8>,
}
