From afb066c4ee9b3511191590c4081679ae5b538662 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 6 Feb 2024 19:55:34 +0600 Subject: [PATCH 1/5] start 0.20.32 --- CHANGELOG.md | 2 ++ gradle.properties | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99d772fd305..baa2df0bd08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.20.32 + ## 0.20.31 * `Versions`: diff --git a/gradle.properties b/gradle.properties index 98a9ff0b8b7..456d202d9c8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.20.31 -android_code_version=237 +version=0.20.32 +android_code_version=238 From a374e53a3a82d624828f6465499de0e72ab8e5b9 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 6 Feb 2024 19:56:44 +0600 Subject: [PATCH 2/5] update StringResource --- CHANGELOG.md | 4 ++ .../src/commonMain/kotlin/StringResource.kt | 54 +++++++++++++++++-- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index baa2df0bd08..20d0cd746e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 0.20.32 +* `Resources`: + * Make `StringResource` serializable + * Add several variants of builder usages + ## 0.20.31 * `Versions`: diff --git a/resources/src/commonMain/kotlin/StringResource.kt b/resources/src/commonMain/kotlin/StringResource.kt index d87526fc691..397afa6af27 100644 --- a/resources/src/commonMain/kotlin/StringResource.kt +++ b/resources/src/commonMain/kotlin/StringResource.kt @@ -1,6 +1,11 @@ package dev.inmo.micro_utils.strings import dev.inmo.micro_utils.language_codes.IetfLang +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder /** * Use this class as a type of your strings object fields. For example: @@ -15,9 +20,10 @@ import dev.inmo.micro_utils.language_codes.IetfLang * * @see buildStringResource */ -class StringResource( +@Serializable(StringResource.Companion::class) +data class StringResource( val default: String, - val map: Map> + val translations: Map> ) { class Builder( var default: String @@ -31,11 +37,18 @@ class StringResource( infix fun IetfLang.variant(value: () -> String) = this variant lazy(value) infix fun IetfLang.variant(value: String) = this variant lazyOf(value) + operator fun IetfLang.invoke(value: () -> String) = this variant value + operator fun IetfLang.invoke(value: String) = this variant value + infix fun String.variant(value: Lazy) = IetfLang(this) variant value infix fun String.variant(value: () -> String) = IetfLang(this) variant lazy(value) infix fun String.variant(value: String) = this variant lazyOf(value) + + operator fun String.invoke(value: () -> String) = this variant value + operator fun String.invoke(value: String) = this variant value + fun build() = StringResource(default, map.toMap()) } @@ -43,17 +56,48 @@ class StringResource( if (languageCode == null) { return default } - map[languageCode] ?.let { return it.value } + translations[languageCode] ?.let { return it.value } return languageCode.parentLang ?.let { - map[it] ?.value + translations[it] ?.value } ?: default } + + companion object : KSerializer { + @Serializable + private class Surrogate( + val default: String, + val translations: Map + ) + + override val descriptor: SerialDescriptor + get() = Surrogate.serializer().descriptor + + override fun deserialize(decoder: Decoder): StringResource { + val surrogate = Surrogate.serializer().deserialize(decoder) + return StringResource( + surrogate.default, + surrogate.translations.map { IetfLang(it.key) to lazyOf(it.value) }.toMap() + ) + } + + override fun serialize(encoder: Encoder, value: StringResource) { + Surrogate.serializer().serialize( + encoder, + Surrogate( + value.default, + value.translations.map { + it.key.code to it.value.value + }.toMap() + ) + ) + } + } } inline fun buildStringResource( default: String, - builder: StringResource.Builder.() -> Unit + builder: StringResource.Builder.() -> Unit = {} ): StringResource { return StringResource.Builder(default).apply(builder).build() } From e89b8c72dde424d2b022abac2152b3ea73f6255c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 8 Feb 2024 10:40:43 +0600 Subject: [PATCH 3/5] Update gradle-wrapper.properties --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a5952066425..17655d0ef2b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From e235c52b6cfb2be3e3c3cee78b314ef7cb4c99c2 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 10 Feb 2024 15:39:48 +0600 Subject: [PATCH 4/5] Update libs.versions.toml --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f9b61e45c5f..5818b8f5c5e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ gh-release = "2.5.2" koin = "3.5.3" -okio = "3.7.0" +okio = "3.8.0" ksp = "1.9.22-1.0.17" kotlin-poet = "1.16.0" From 22541f2d5e3f596a34b2ce6f884f8a3ab842ec93 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 10 Feb 2024 15:40:59 +0600 Subject: [PATCH 5/5] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20d0cd746e1..812077ea0d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 0.20.32 +* `Versions`: + * `Okio`: `3.7.0` -> `3.8.0` * `Resources`: * Make `StringResource` serializable * Add several variants of builder usages