Add more extensions for encoder and decoder

This commit is contained in:
Atos1337 2021-12-03 23:55:43 +03:00
parent f77f6b7211
commit e793cdefee
3 changed files with 31 additions and 1 deletions

View File

@ -1,6 +1,8 @@
package ru.mipt.npm.xodus.serialization.json package ru.mipt.npm.xodus.serialization.json
import jetbrains.exodus.entitystore.Entity import jetbrains.exodus.entitystore.Entity
import jetbrains.exodus.entitystore.EntityId
import jetbrains.exodus.entitystore.PersistentEntityStore
import jetbrains.exodus.entitystore.StoreTransaction import jetbrains.exodus.entitystore.StoreTransaction
import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.json.* import kotlinx.serialization.json.*
@ -40,3 +42,20 @@ public fun <T> StoreTransaction.decodeFromEntity(entity: Entity, deserializer: D
} }
public inline fun <reified T> StoreTransaction.decodeFromEntity(entity: Entity): T = decodeFromEntity(entity, serializer()) public inline fun <reified T> StoreTransaction.decodeFromEntity(entity: Entity): T = decodeFromEntity(entity, serializer())
// First entity with entityType will be decoded
public fun <T> PersistentEntityStore.decodeFromEntity(entityType: String, deserializer: DeserializationStrategy<T>): T? {
return computeInTransaction { txn ->
txn.getAll(entityType).first?.let { txn.decodeFromEntity(it, deserializer) }
}
}
public inline fun <reified T> PersistentEntityStore.decodeFromEntity(entityType: String): T? = decodeFromEntity(entityType, serializer())
public fun <T> PersistentEntityStore.decodeFromEntity(entityId: EntityId, deserializer: DeserializationStrategy<T>): T? {
return computeInTransaction { txn ->
txn.decodeFromEntity(txn.getEntity(entityId), deserializer)
}
}
public inline fun <reified T> PersistentEntityStore.decodeFromEntity(entityId: EntityId): T? = decodeFromEntity(entityId, serializer())

View File

@ -1,6 +1,8 @@
package ru.mipt.npm.xodus.serialization.json package ru.mipt.npm.xodus.serialization.json
import jetbrains.exodus.entitystore.Entity import jetbrains.exodus.entitystore.Entity
import jetbrains.exodus.entitystore.EntityId
import jetbrains.exodus.entitystore.PersistentEntityStore
import jetbrains.exodus.entitystore.StoreTransaction import jetbrains.exodus.entitystore.StoreTransaction
import kotlinx.serialization.SerializationStrategy import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.json.* import kotlinx.serialization.json.*
@ -56,3 +58,12 @@ public fun <T> StoreTransaction.encodeToEntity(serializer: SerializationStrategy
public inline fun <reified T> StoreTransaction.encodeToEntity(value: T, entityType: String): Entity = public inline fun <reified T> StoreTransaction.encodeToEntity(value: T, entityType: String): Entity =
encodeToEntity(serializer(), value, entityType) encodeToEntity(serializer(), value, entityType)
public fun <T> PersistentEntityStore.encodeToEntity(serializer: SerializationStrategy<T>, value: T, entityType: String): EntityId {
return computeInTransaction { txn ->
txn.encodeToEntity(serializer, value, entityType).id
}
}
public inline fun <reified T> PersistentEntityStore.encodeToEntity(value: T, entityType: String): EntityId =
encodeToEntity(serializer(), value, entityType)

View File

@ -28,7 +28,7 @@ internal fun main() {
user = JsonObject(content = mapOf(Pair("name", JsonPrimitive("SCADA")))) user = JsonObject(content = mapOf(Pair("name", JsonPrimitive("SCADA"))))
) )
val entityStore = PersistentEntityStores.newInstance(Paths.get("xodus_serialization").toString()) val entityStore = PersistentEntityStores.newInstance(Paths.get(".xodus_serialization").toString())
entityStore.executeInTransaction { txn -> entityStore.executeInTransaction { txn ->
txn.encodeToEntity(expectedMessage, "MagixMessage") txn.encodeToEntity(expectedMessage, "MagixMessage")
} }