Data.kt

  1. package com.hexagontk.serialization

  2. import kotlin.collections.Map.Entry
  3. import kotlin.reflect.KProperty1

  4. interface Data<T> : Map<String, Any?> {
  5.     val data: Map<String, *>
  6.     fun with(data: Map<String, *>): T

  7.     override val entries: Set<Entry<String, *>>
  8.         get() = data.entries

  9.     override val keys: Set<String>
  10.         get() = data.keys

  11.     override val size: Int
  12.         get() = data.size

  13.     override val values: Collection<*>
  14.         get() = data.values

  15.     override fun isEmpty(): Boolean =
  16.         data.isEmpty()

  17.     override fun get(key: String): Any? =
  18.         data[key]

  19.     override fun containsValue(value: Any?): Boolean =
  20.         data.containsValue(value)

  21.     override fun containsKey(key: String): Boolean =
  22.         data.containsKey(key)

  23.     operator fun get(key: KProperty1<T, *>): Any? =
  24.         data[key.name]
  25. }