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
|
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())
|
||||||
|
@ -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)
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user