mirror of
https://github.com/signalapp/libsignal.git
synced 2024-09-19 19:42:19 +02:00
backup: Sort group invitees when serializing
This commit is contained in:
parent
52912c7c75
commit
f1b93b508d
@ -32,7 +32,7 @@ pub(crate) mod chat_style;
|
||||
mod gift_badge;
|
||||
use gift_badge::*;
|
||||
|
||||
mod group;
|
||||
pub(crate) mod group;
|
||||
use group::*;
|
||||
|
||||
mod link;
|
||||
|
@ -14,6 +14,7 @@ use libsignal_protocol::{Aci, Pni, ServiceId};
|
||||
use macro_rules_attribute::macro_rules_derive;
|
||||
use protobuf::{EnumOrUnknown, Message};
|
||||
|
||||
use crate::backup::serialize::UnorderedList;
|
||||
use crate::backup::time::Duration;
|
||||
use crate::backup::{serialize, uuid_bytes_to_aci};
|
||||
use crate::proto::backup::{
|
||||
@ -190,7 +191,7 @@ pub enum GroupChatUpdate {
|
||||
GroupInvitationRevokedUpdate {
|
||||
#[serde(serialize_with = "serialize::optional_service_id_as_string")]
|
||||
updaterAci: Option<Aci>,
|
||||
invitees: Vec<Invitee>,
|
||||
invitees: UnorderedList<Invitee>,
|
||||
},
|
||||
GroupJoinRequestUpdate {
|
||||
#[serde(serialize_with = "serialize::service_id_as_string")]
|
||||
@ -365,7 +366,7 @@ impl ValidateFrom<EnumOrUnknown<proto::GroupV2AccessLevel>> for AccessLevel {
|
||||
}
|
||||
}
|
||||
|
||||
impl ValidateFrom<Vec<proto::group_invitation_revoked_update::Invitee>> for Vec<Invitee> {
|
||||
impl ValidateFrom<Vec<proto::group_invitation_revoked_update::Invitee>> for UnorderedList<Invitee> {
|
||||
fn validate_from(
|
||||
invitees: Vec<proto::group_invitation_revoked_update::Invitee>,
|
||||
) -> Result<Self, GroupUpdateFieldError> {
|
||||
@ -514,7 +515,7 @@ mod test {
|
||||
]
|
||||
}
|
||||
|
||||
fn validated_invitees() -> Vec<Invitee> {
|
||||
fn validated_invitees() -> UnorderedList<Invitee> {
|
||||
vec![
|
||||
Invitee {
|
||||
inviter: None,
|
||||
@ -527,6 +528,7 @@ mod test {
|
||||
invitee_aci: None,
|
||||
},
|
||||
]
|
||||
.into()
|
||||
}
|
||||
|
||||
fn invitee_invalid_aci() -> Vec<group_invitation_revoked_update::Invitee> {
|
||||
@ -556,11 +558,11 @@ mod test {
|
||||
#[test_case(ACI.service_id_binary(), Ok(ServiceId::Aci(ACI)))]
|
||||
#[test_case(vec![], Err::<ServiceId, _>(InvalidServiceId))]
|
||||
#[test_case(valid_invitees(), Ok(validated_invitees()))]
|
||||
#[test_case(vec![], Ok(vec![]))]
|
||||
#[test_case(invitee_invalid_aci(), Err::<Vec<Invitee>,_>(InvalidInvitee(InviteeError::InviteeAci)))]
|
||||
#[test_case(vec![], Ok(UnorderedList::from(vec![])))]
|
||||
#[test_case(invitee_invalid_aci(), Err::<UnorderedList<Invitee>,_>(InvalidInvitee(InviteeError::InviteeAci)))]
|
||||
#[test_case(
|
||||
invitee_pni_service_id_binary(),
|
||||
Err::<Vec<Invitee>, _>(InvalidInvitee(InviteeError::InviteePni))
|
||||
Err::<UnorderedList<Invitee>, _>(InvalidInvitee(InviteeError::InviteePni))
|
||||
)]
|
||||
#[test_case(
|
||||
EnumOrUnknown::default(),
|
||||
|
@ -11,6 +11,7 @@ use uuid::Uuid;
|
||||
|
||||
use crate::backup::account_data::AccountData;
|
||||
use crate::backup::call::AdHocCall;
|
||||
use crate::backup::chat::group::Invitee;
|
||||
use crate::backup::chat::text::{TextEffect, TextRange};
|
||||
use crate::backup::chat::{ChatData, OutgoingSend};
|
||||
use crate::backup::frame::RecipientId;
|
||||
@ -250,6 +251,16 @@ impl SerializeOrder for OutgoingSend {
|
||||
}
|
||||
}
|
||||
|
||||
impl SerializeOrder for Invitee {
|
||||
fn serialize_cmp(&self, other: &Self) -> std::cmp::Ordering {
|
||||
(self.invitee_aci, self.invitee_pni, self.inviter).cmp(&(
|
||||
other.invitee_aci,
|
||||
other.invitee_pni,
|
||||
other.inviter,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl serde::Serialize for proto::contact_attachment::Name {
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
|
Loading…
Reference in New Issue
Block a user