xmtp_db/encrypted_store/group_message/
convert.rs1use super::*;
2use xmtp_configuration::Originators;
3use xmtp_proto::ConversionError;
4use xmtp_proto::xmtp::device_sync::message_backup::{
5 ContentTypeSave, DeliveryStatusSave, GroupMessageKindSave, GroupMessageSave,
6};
7
8impl TryFrom<GroupMessageSave> for StoredGroupMessage {
9 type Error = ConversionError;
10 fn try_from(value: GroupMessageSave) -> Result<Self, Self::Error> {
11 let kind = value.kind().try_into()?;
12 let delivery_status = value.delivery_status().try_into()?;
13
14 let mut content_type: ContentType = value.content_type_save().into();
15 if matches!(content_type, ContentType::Unknown) {
16 content_type = value.content_type.into();
17 }
18
19 Ok(Self {
20 id: value.id,
21 group_id: value.group_id,
22 decrypted_message_bytes: value.decrypted_message_bytes,
23 sent_at_ns: value.sent_at_ns,
24 kind,
25 sender_installation_id: value.sender_installation_id,
26 sender_inbox_id: value.sender_inbox_id,
27 delivery_status,
28 content_type,
29 version_major: value.version_major,
30 version_minor: value.version_minor,
31 authority_id: value.authority_id,
32 reference_id: value.reference_id,
33 sequence_id: value.sequence_id.unwrap_or(0),
34 originator_id: value
35 .originator_id
36 .unwrap_or(Originators::APPLICATION_MESSAGES.into()),
37 expire_at_ns: None,
38 inserted_at_ns: 0, should_push: false, })
41 }
42}
43
44impl TryFrom<GroupMessageKindSave> for GroupMessageKind {
45 type Error = ConversionError;
46 fn try_from(value: GroupMessageKindSave) -> Result<Self, Self::Error> {
47 let message_kind = match value {
48 GroupMessageKindSave::Application => Self::Application,
49 GroupMessageKindSave::MembershipChange => Self::MembershipChange,
50 GroupMessageKindSave::Unspecified => {
51 return Err(ConversionError::Unspecified("message_kind"));
52 }
53 };
54 Ok(message_kind)
55 }
56}
57
58impl TryFrom<DeliveryStatusSave> for DeliveryStatus {
59 type Error = ConversionError;
60 fn try_from(value: DeliveryStatusSave) -> Result<Self, Self::Error> {
61 let delivery_status = match value {
62 DeliveryStatusSave::Failed => Self::Failed,
63 DeliveryStatusSave::Published => Self::Published,
64 DeliveryStatusSave::Unpublished => Self::Unpublished,
65 DeliveryStatusSave::Unspecified => {
66 return Err(ConversionError::Unspecified("delivery_status"));
67 }
68 };
69 Ok(delivery_status)
70 }
71}
72
73impl From<ContentTypeSave> for ContentType {
74 fn from(value: ContentTypeSave) -> Self {
75 match value {
76 ContentTypeSave::Attachment => Self::Attachment,
77 ContentTypeSave::GroupMembershipChange => Self::GroupMembershipChange,
78 ContentTypeSave::GroupUpdated => Self::GroupUpdated,
79 ContentTypeSave::Reaction => Self::Reaction,
80 ContentTypeSave::ReadReceipt => Self::ReadReceipt,
81 ContentTypeSave::RemoteAttachment => Self::RemoteAttachment,
82 ContentTypeSave::Reply => Self::Reply,
83 ContentTypeSave::Text => Self::Text,
84 ContentTypeSave::TransactionReference => Self::TransactionReference,
85 _ => Self::Unknown,
86 }
87 }
88}
89
90impl From<StoredGroupMessage> for GroupMessageSave {
91 fn from(value: StoredGroupMessage) -> Self {
92 let kind: GroupMessageKindSave = value.kind.into();
93 let delivery_status: DeliveryStatusSave = value.delivery_status.into();
94
95 Self {
96 id: value.id,
97 group_id: value.group_id,
98 decrypted_message_bytes: value.decrypted_message_bytes,
99 sent_at_ns: value.sent_at_ns,
100 kind: kind as i32,
101 sender_installation_id: value.sender_installation_id,
102 sender_inbox_id: value.sender_inbox_id,
103 delivery_status: delivery_status as i32,
104 content_type: value.content_type.to_string(),
105 version_major: value.version_major,
106 version_minor: value.version_minor,
107 authority_id: value.authority_id,
108 reference_id: value.reference_id,
109 sequence_id: Some(value.sequence_id),
110 originator_id: Some(value.originator_id),
111
112 #[allow(deprecated)]
114 content_type_save: 0,
115 }
116 }
117}
118impl From<GroupMessageKind> for GroupMessageKindSave {
119 fn from(value: GroupMessageKind) -> Self {
120 match value {
121 GroupMessageKind::Application => Self::Application,
122 GroupMessageKind::MembershipChange => Self::MembershipChange,
123 }
124 }
125}
126impl From<DeliveryStatus> for DeliveryStatusSave {
127 fn from(value: DeliveryStatus) -> Self {
128 match value {
129 DeliveryStatus::Failed => Self::Failed,
130 DeliveryStatus::Published => Self::Published,
131 DeliveryStatus::Unpublished => Self::Unpublished,
132 }
133 }
134}