mirror of
https://github.com/InsanusMokrassar/PlaguPoster.git
synced 2025-12-15 01:15:40 +00:00
added ratings
This commit is contained in:
1
ratings/source/src/commonMain/kotlin/PackageInfo.kt
Normal file
1
ratings/source/src/commonMain/kotlin/PackageInfo.kt
Normal file
@@ -0,0 +1 @@
|
||||
package dev.inmo.plaguposter.ratings.source
|
||||
@@ -0,0 +1,35 @@
|
||||
package dev.inmo.plaguposter.ratings.source.models
|
||||
|
||||
import dev.inmo.plaguposter.ratings.models.Rating
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.MapSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
typealias RatingsVariants = Map<String, Rating>
|
||||
object RatingsVariantsSerializer : KSerializer<RatingsVariants> {
|
||||
val surrogate = JsonObject.serializer()
|
||||
override val descriptor: SerialDescriptor = surrogate.descriptor
|
||||
override fun deserialize(decoder: Decoder): RatingsVariants {
|
||||
val o = surrogate.deserialize(decoder)
|
||||
return o.entries.mapNotNull { (key, value) ->
|
||||
val doubleValue = (value as? JsonPrimitive) ?.doubleOrNull ?: return@mapNotNull null
|
||||
key to Rating(doubleValue)
|
||||
}.toMap()
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: RatingsVariants) {
|
||||
surrogate.serialize(
|
||||
encoder,
|
||||
buildJsonObject {
|
||||
value.forEach { (text, rating) ->
|
||||
put(text, rating.double)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.inmo.plaguposter.ratings.source.models
|
||||
|
||||
import dev.inmo.plaguposter.ratings.models.Rating
|
||||
|
||||
fun interface VariantTransformer {
|
||||
operator fun invoke(from: String): Rating?
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package dev.inmo.plaguposter.ratings.source.repos
|
||||
|
||||
import dev.inmo.micro_utils.repos.KeyValueRepo
|
||||
import dev.inmo.plaguposter.common.ShortMessageInfo
|
||||
import dev.inmo.plaguposter.posts.models.PostId
|
||||
import dev.inmo.tgbotapi.types.PollIdentifier
|
||||
|
||||
interface PollsToMessagesInfoRepo : KeyValueRepo<PollIdentifier, ShortMessageInfo>
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.inmo.plaguposter.ratings.source.repos
|
||||
|
||||
import dev.inmo.micro_utils.repos.KeyValueRepo
|
||||
import dev.inmo.plaguposter.posts.models.PostId
|
||||
import dev.inmo.tgbotapi.types.PollIdentifier
|
||||
|
||||
interface PollsToPostsIdsRepo : KeyValueRepo<PollIdentifier, PostId>
|
||||
Reference in New Issue
Block a user