Skip to content

Commit 33bdafa

Browse files
committed
add new codec for membership changes
1 parent b74f02f commit 33bdafa

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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

Comments
 (0)