Add more extensions for encoder and decoder
This commit is contained in:
parent
f77f6b7211
commit
e793cdefee
@ -1,6 +1,8 @@
|
||||
package ru.mipt.npm.xodus.serialization.json
|
||||
|
||||
import jetbrains.exodus.entitystore.Entity
|
||||
import jetbrains.exodus.entitystore.EntityId
|
||||
import jetbrains.exodus.entitystore.PersistentEntityStore
|
||||
import jetbrains.exodus.entitystore.StoreTransaction
|
||||
import kotlinx.serialization.DeserializationStrategy
|
||||
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())
|
||||
|
||||
// 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())
|
||||
|
@ -1,6 +1,8 @@
|
||||
package ru.mipt.npm.xodus.serialization.json
|
||||
|
||||
import jetbrains.exodus.entitystore.Entity
|
||||
import jetbrains.exodus.entitystore.EntityId
|
||||
import jetbrains.exodus.entitystore.PersistentEntityStore
|
||||
import jetbrains.exodus.entitystore.StoreTransaction
|
||||
import kotlinx.serialization.SerializationStrategy
|
||||
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 =
|
||||
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)
|
||||
|
@ -28,7 +28,7 @@ internal fun main() {
|
||||
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 ->
|
||||
txn.encodeToEntity(expectedMessage, "MagixMessage")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user