Łukasz Bednarczyk
09/30/2021, 12:22 PMEmil Kantis
09/30/2021, 12:49 PMclass JsonStore<T : Comparable<T>, S>(
private val json: Json,
private val serializer: KSerializer<S>,
private val column: Column<String>,
) {
operator fun getValue(thisRef: Entity<T>, property: KProperty<*>): S =
json.decodeFromString(serializer, with(thisRef) { column.lookup() })
operator fun setValue(thisRef: Entity<T>, property: KProperty<*>, value: S) =
with(thisRef) { column.setValue(this, property, json.encodeToString(serializer, value)) }
}
inline fun <T : Comparable<T>, reified S> jsonStore(column: Column<String>, json: Json = Json.Default) = JsonStore<T, S>(
json,
serializer(),
column,
)
var tags: List<String> by jsonStore(Clients.tags)
Łukasz Bednarczyk
09/30/2021, 12:57 PM