diff --git a/dataforge-io/src/commonMain/kotlin/hep/dataforge/io/JsonMetaFormat.kt b/dataforge-io/src/commonMain/kotlin/hep/dataforge/io/JsonMetaFormat.kt index 9b78cbb3..d27b0a97 100644 --- a/dataforge-io/src/commonMain/kotlin/hep/dataforge/io/JsonMetaFormat.kt +++ b/dataforge-io/src/commonMain/kotlin/hep/dataforge/io/JsonMetaFormat.kt @@ -72,7 +72,7 @@ fun Value.toJson(descriptor: ValueDescriptor? = null): JsonElement { //Use these methods to customize JSON key mapping private fun NameToken.toJsonKey(descriptor: ItemDescriptor?) = toString() -private fun NodeDescriptor?.getDescriptor(key: String) = this?.items?.get(key) +//private fun NodeDescriptor?.getDescriptor(key: String) = this?.items?.get(key) fun Meta.toJson(descriptor: NodeDescriptor? = null): JsonObject { @@ -141,15 +141,13 @@ class JsonMeta(val json: JsonObject, val descriptor: NodeDescriptor? = null) : M @Suppress("UNCHECKED_CAST") private operator fun MutableMap>.set(key: String, value: JsonElement): Unit { - val itemDescriptor = descriptor.getDescriptor(key) - //use name from descriptor in case descriptor name differs from json key - val name = itemDescriptor?.name ?: key + val itemDescriptor = descriptor?.items?.get(key) return when (value) { is JsonPrimitive -> { - this[name] = MetaItem.ValueItem(value.toValue(itemDescriptor as? ValueDescriptor)) as MetaItem + this[key] = MetaItem.ValueItem(value.toValue(itemDescriptor as? ValueDescriptor)) as MetaItem } is JsonObject -> { - this[name] = MetaItem.NodeItem(JsonMeta(value, itemDescriptor as? NodeDescriptor)) + this[key] = MetaItem.NodeItem(JsonMeta(value, itemDescriptor as? NodeDescriptor)) } is JsonArray -> { when { @@ -160,10 +158,10 @@ class JsonMeta(val json: JsonObject, val descriptor: NodeDescriptor? = null) : M (it as JsonPrimitive).toValue(itemDescriptor as? ValueDescriptor) } ) - this[name] = MetaItem.ValueItem(listValue) as MetaItem + this[key] = MetaItem.ValueItem(listValue) as MetaItem } else -> value.forEachIndexed { index, jsonElement -> - this["$name[$index]"] = jsonElement.toMetaItem(itemDescriptor) + this["$key[$index]"] = jsonElement.toMetaItem(itemDescriptor) } } } diff --git a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/descriptors/ItemDescriptor.kt b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/descriptors/ItemDescriptor.kt index 3d6e7744..93765dd4 100644 --- a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/descriptors/ItemDescriptor.kt +++ b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/descriptors/ItemDescriptor.kt @@ -11,13 +11,6 @@ import hep.dataforge.values.ValueType sealed class ItemDescriptor(override val config: Config) : Specific { - /** - * The name of this item - * - * @return - */ - var name: String by string { error("Anonymous descriptors are not allowed") } - /** * True if same name siblings with this name are allowed * @@ -128,12 +121,12 @@ class NodeDescriptor(config: Config) : ItemDescriptor(config) { * Add a value descriptor using block for */ fun value(name: String, block: ValueDescriptor.() -> Unit) { - value(name, ValueDescriptor { this.name = name }.apply(block)) + value(name, ValueDescriptor(block)) } fun value(name: Name, block: ValueDescriptor.() -> Unit) { require(name.length >= 1) { "Name length for value descriptor must be non-empty" } - buildNode(name.cutLast()).value(name.last().toString()) + buildNode(name.cutLast()).value(name.last().toString(), block) } val items: Map get() = nodes + values @@ -234,7 +227,6 @@ class ValueDescriptor(config: Config) : ItemDescriptor(config) { override fun wrap(config: Config): ValueDescriptor = ValueDescriptor(config) inline fun > enum(name: String) = ValueDescriptor { - this.name = name type(ValueType.STRING) this.allowedValues = enumValues().map { Value.of(it.name) } }