1
+ package uniffi.xmtpv3.org.xmtp.android.library.codecs
2
+
3
+ import com.google.gson.GsonBuilder
4
+ import com.google.protobuf.kotlin.toByteStringUtf8
5
+ import org.xmtp.android.library.codecs.ContentCodec
6
+ import org.xmtp.android.library.codecs.ContentTypeId
7
+ import org.xmtp.android.library.codecs.ContentTypeIdBuilder
8
+ import org.xmtp.android.library.codecs.EncodedContent
9
+
10
+ val ContentTypeGroupMembershipChange = ContentTypeIdBuilder .builderFromAuthorityId(
11
+ " xmtp.org" ,
12
+ " group_membership_change" ,
13
+ versionMajor = 1 ,
14
+ versionMinor = 0
15
+ )
16
+
17
+ data class GroupMembershipChanges (
18
+ val membersAdded : List <MembershipChange >,
19
+ val membersRemoved : List <MembershipChange >,
20
+ val installationsAdded : List <MembershipChange >,
21
+ val installationsRemoved : List <MembershipChange >,
22
+ )
23
+
24
+ data class MembershipChange (
25
+ val installationIds : List <ByteArray >,
26
+ val accountAddress : String ,
27
+ val initiatedByAccountAddress : String ,
28
+ )
29
+
30
+ data class GroupMembershipChangeCodec (override var contentType : ContentTypeId = ContentTypeGroupMembershipChange ) :
31
+ ContentCodec <GroupMembershipChanges > {
32
+
33
+ override fun encode (content : GroupMembershipChanges ): EncodedContent {
34
+ val gson = GsonBuilder ().create()
35
+ return EncodedContent .newBuilder().also {
36
+ it.type = ContentTypeGroupMembershipChange
37
+ it.content = gson.toJson(content).toByteStringUtf8()
38
+ }.build()
39
+ }
40
+
41
+ override fun decode (content : EncodedContent ): GroupMembershipChanges {
42
+ val gson = GsonBuilder ().create()
43
+ return gson.fromJson(content.content.toStringUtf8(), GroupMembershipChanges ::class .java)
44
+ }
45
+
46
+ override fun fallback (content : GroupMembershipChanges ): String? {
47
+ return null
48
+ }
49
+ }
0 commit comments