Create value class for transactionId. There is no validation on the format, but validation is a bonus for userId, roomId, etc.

The main advantage of using value classes instead of Strings everywhere is to detect errors at compilation time.
This commit is contained in:
Benoit Marty 2023-07-12 18:15:17 +02:00
parent 1e45235c64
commit 6e2f645514
14 changed files with 59 additions and 22 deletions

View file

@ -22,6 +22,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.ProgressCallback
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.media.AudioInfo
import io.element.android.libraries.matrix.api.media.FileInfo
@ -218,10 +219,10 @@ class RustMatrixRoom(
}
}
override suspend fun editMessage(originalEventId: EventId?, transactionId: String?, message: String): Result<Unit> = withContext(roomDispatcher) {
override suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, message: String): Result<Unit> = withContext(roomDispatcher) {
if (originalEventId != null) {
runCatching {
innerRoom.edit(/* TODO use content */ message, originalEventId.value, transactionId)
innerRoom.edit(/* TODO use content */ message, originalEventId.value, transactionId?.value)
}
} else {
runCatching {
@ -326,17 +327,17 @@ class RustMatrixRoom(
}
}
override suspend fun retrySendMessage(transactionId: String): Result<Unit> =
override suspend fun retrySendMessage(transactionId: TransactionId): Result<Unit> =
withContext(roomDispatcher) {
runCatching {
innerRoom.retrySend(transactionId)
innerRoom.retrySend(transactionId.value)
}
}
override suspend fun cancelSend(transactionId: String): Result<Unit> =
override suspend fun cancelSend(transactionId: TransactionId): Result<Unit> =
withContext(roomDispatcher) {
runCatching {
innerRoom.cancelSend(transactionId)
innerRoom.cancelSend(transactionId.value)
}
}

View file

@ -17,6 +17,7 @@
package io.element.android.libraries.matrix.impl.timeline.item.event
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
@ -35,7 +36,7 @@ class EventTimelineItemMapper(private val contentMapper: TimelineEventContentMap
EventTimelineItem(
uniqueIdentifier = it.uniqueIdentifier(),
eventId = it.eventId()?.let(::EventId),
transactionId = it.transactionId(),
transactionId = it.transactionId()?.let(::TransactionId),
isEditable = it.isEditable(),
isLocal = it.isLocal(),
isOwn = it.isOwn(),