use std::collections::HashSet;
use sha2::{Digest, Sha256};
use crate::protos::de_mls::messages::v1::{ConversationUpdateRequest, conversation_update_request};
pub fn self_leave_proposal_id(identity: &[u8]) -> u32 {
let hash = Sha256::digest(identity);
u32::from_be_bytes([hash[0], hash[1], hash[2], hash[3]])
}
pub(crate) fn is_auto_approved_entry(
proposal_id: u32,
request: &ConversationUpdateRequest,
) -> bool {
match request.payload.as_ref() {
Some(conversation_update_request::Payload::RemoveMember(r)) => {
proposal_id == self_leave_proposal_id(&r.identity)
}
_ => false,
}
}
pub fn member_set(members: &[Vec<u8>]) -> HashSet<&[u8]> {
members.iter().map(|m| m.as_slice()).collect()
}
pub fn target_identity_of(request: &ConversationUpdateRequest) -> Option<&[u8]> {
match request.payload.as_ref()? {
conversation_update_request::Payload::InviteMember(m) => Some(&m.identity),
conversation_update_request::Payload::RemoveMember(m) => Some(&m.identity),
_ => None,
}
}