Skip to content

Commit 2a959b9

Browse files
authored
Merge pull request #141 from what3words/task/add-serialization-w3wmarkercolor
Make W3WMarkerColor serializable
2 parents 6d81f90 + 65c2f5e commit 2a959b9

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

gradle/libs.versions.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ androidGradlePlugin = "8.8.2"
99
autonomousappsAnalysis = "1.20.0"
1010
gradleKtlint = "10.1.0"
1111
jreleaser = "1.17.0"
12+
kotlinxSerialization = "1.7.3"
1213

1314
#Kotlin
1415
kotlin = "2.1.0"
@@ -57,6 +58,7 @@ kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collec
5758
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroid" }
5859
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutinesCore" }
5960
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTest" }
61+
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
6062
ktlint-gradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "gradleKtlint" }
6163
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
6264

@@ -105,6 +107,7 @@ android-library = { id = "com.android.library", version.ref = "androidGradlePlug
105107
gradle-ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "gradleKtlint" }
106108
autonomousapps-analysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "autonomousappsAnalysis" }
107109
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
110+
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
108111
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
109112
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
110113
maven-publish = { id = "maven-publish" }

lib-compose/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import java.util.Base64
44
plugins {
55
alias(libs.plugins.android.library)
66
alias(libs.plugins.kotlin.android)
7+
alias(libs.plugins.kotlin.serialization)
78
id(libs.plugins.maven.publish.get().pluginId)
89
id(libs.plugins.signing.get().pluginId)
910
alias(libs.plugins.dokka)
@@ -152,6 +153,7 @@ dependencies {
152153
implementation(libs.kotlinx.coroutines.android)
153154
testImplementation(libs.kotlinx.coroutines.test)
154155
api(libs.kotlinx.collections.immutable)
156+
api(libs.kotlinx.serialization.json)
155157

156158
// Compose
157159
implementation(platform(libs.androidx.compose.bom))

lib-compose/src/main/java/com/what3words/components/compose/maps/models/W3WMarker.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ import androidx.compose.ui.graphics.Color
77
import androidx.compose.ui.graphics.toArgb
88
import com.what3words.core.types.geometry.W3WCoordinates
99
import com.what3words.core.types.geometry.W3WRectangle
10+
import kotlinx.serialization.KSerializer
11+
import kotlinx.serialization.Serializable
12+
import kotlinx.serialization.descriptors.PrimitiveKind
13+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
14+
import kotlinx.serialization.descriptors.SerialDescriptor
15+
import kotlinx.serialization.encoding.Decoder
16+
import kotlinx.serialization.encoding.Encoder
1017

1118
/**
1219
* Represents a marker on a map, associated with a what3words address.
@@ -89,9 +96,12 @@ data class W3WMarker(
8996
* @property slash The color of the slash in the marker.
9097
* @property id A unique identifier generated from the combination of background and slash colors.
9198
*/
99+
@Serializable
92100
@Immutable
93101
data class W3WMarkerColor(
102+
@Serializable(with = ColorSerializer::class)
94103
val background: Color,
104+
@Serializable(with = ColorSerializer::class)
95105
val slash: Color
96106
) {
97107
val id: Long
@@ -100,4 +110,16 @@ data class W3WMarkerColor(
100110
val slashLong = slash.toArgb().toLong() and 0xFFFFFFFFL
101111
return (backgroundLong shl 32) or slashLong
102112
}
113+
}
114+
115+
object ColorSerializer : KSerializer<Color> {
116+
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Color", PrimitiveKind.LONG)
117+
118+
override fun serialize(encoder: Encoder, value: Color) {
119+
encoder.encodeLong(value.value.toLong())
120+
}
121+
122+
override fun deserialize(decoder: Decoder): Color {
123+
return Color(decoder.decodeLong().toULong())
124+
}
103125
}

0 commit comments

Comments
 (0)