xmtp_db/encrypted_store/group/
convert.rs1use super::*;
2use xmtp_proto::ConversionError;
3use xmtp_proto::xmtp::device_sync::group_backup::{ConversationTypeSave, GroupMembershipStateSave};
4
5use xmtp_proto::xmtp::mls::message_contents::ConversationType as ConversationTypeProto;
6
7impl TryFrom<GroupMembershipStateSave> for GroupMembershipState {
8 type Error = ConversionError;
9 fn try_from(value: GroupMembershipStateSave) -> Result<Self, Self::Error> {
10 let membership_state = match value {
11 GroupMembershipStateSave::Allowed => Self::Allowed,
12 GroupMembershipStateSave::Pending => Self::Pending,
13 GroupMembershipStateSave::Rejected => Self::Rejected,
14 GroupMembershipStateSave::Restored => Self::Restored,
15 GroupMembershipStateSave::PendingRemove => Self::PendingRemove,
16 _ => {
17 return Err(ConversionError::Unspecified("group_membership_state"));
18 }
19 };
20 Ok(membership_state)
21 }
22}
23
24impl TryFrom<ConversationTypeSave> for ConversationType {
25 type Error = ConversionError;
26 fn try_from(value: ConversationTypeSave) -> Result<Self, Self::Error> {
27 let conversation_type = match value {
28 ConversationTypeSave::Dm => Self::Dm,
29 ConversationTypeSave::Group => Self::Group,
30 ConversationTypeSave::Sync => Self::Sync,
31 ConversationTypeSave::Unspecified => {
32 return Err(ConversionError::Unspecified("conversation_type"));
33 }
34 };
35 Ok(conversation_type)
36 }
37}
38
39impl From<GroupMembershipState> for GroupMembershipStateSave {
40 fn from(value: GroupMembershipState) -> Self {
41 match value {
42 GroupMembershipState::Allowed => Self::Allowed,
43 GroupMembershipState::Pending => Self::Pending,
44 GroupMembershipState::Rejected => Self::Rejected,
45 GroupMembershipState::Restored => Self::Restored,
46 GroupMembershipState::PendingRemove => Self::PendingRemove,
47 }
48 }
49}
50impl From<ConversationType> for ConversationTypeSave {
51 fn from(value: ConversationType) -> Self {
52 match value {
53 ConversationType::Dm => Self::Dm,
54 ConversationType::Group => Self::Group,
55 ConversationType::Sync => Self::Sync,
56 ConversationType::Oneshot => Self::Unspecified,
57 }
58 }
59}
60
61impl From<ConversationType> for ConversationTypeProto {
69 fn from(value: ConversationType) -> Self {
70 match value {
71 ConversationType::Group => Self::Group,
72 ConversationType::Dm => Self::Dm,
73 ConversationType::Sync => Self::Sync,
74 ConversationType::Oneshot => Self::Oneshot,
75 }
76 }
77}
78
79impl TryFrom<i32> for ConversationType {
80 type Error = xmtp_proto::ConversionError;
81
82 fn try_from(value: i32) -> Result<Self, Self::Error> {
83 Ok(match value {
84 1 => Self::Group,
85 2 => Self::Dm,
86 3 => Self::Sync,
87 4 => Self::Oneshot,
88 n => {
89 return Err(ConversionError::InvalidValue {
90 item: "ConversationType",
91 expected: "number between 1 - 4",
92 got: n.to_string(),
93 });
94 }
95 })
96 }
97}