deprecate String.parseValue
This commit is contained in:
parent
261c415d3d
commit
2634a19285
@ -1,4 +0,0 @@
|
|||||||
job("Build") {
|
|
||||||
gradlew("openjdk:11", "build")
|
|
||||||
}
|
|
||||||
|
|
@ -10,10 +10,10 @@
|
|||||||
- Kotlin 1.9.20.
|
- Kotlin 1.9.20.
|
||||||
- Migrated from ktor-io to kotlinx-io.
|
- Migrated from ktor-io to kotlinx-io.
|
||||||
- `MutableMeta` builder now returns a simplified version of meta that does not hold listeners.
|
- `MutableMeta` builder now returns a simplified version of meta that does not hold listeners.
|
||||||
- Ktor-io is replaced with kotlinx-io.
|
|
||||||
- More concise names for read/write methods in IO.
|
- More concise names for read/write methods in IO.
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
- `String.parseValue` is replaced with `Value.parse`
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ public fun Meta.toYaml(): YamlMap {
|
|||||||
private class YamlMeta(private val yamlMap: YamlMap, private val descriptor: MetaDescriptor? = null) : Meta {
|
private class YamlMeta(private val yamlMap: YamlMap, private val descriptor: MetaDescriptor? = null) : Meta {
|
||||||
|
|
||||||
override val value: Value?
|
override val value: Value?
|
||||||
get() = yamlMap.getStringOrNull(null)?.parseValue()
|
get() = yamlMap.getStringOrNull(null)?.let { Value.parse(it) }
|
||||||
|
|
||||||
private fun buildItems(): Map<NameToken, Meta> {
|
private fun buildItems(): Map<NameToken, Meta> {
|
||||||
val map = LinkedHashMap<NameToken, Meta>()
|
val map = LinkedHashMap<NameToken, Meta>()
|
||||||
@ -43,13 +43,13 @@ private class YamlMeta(private val yamlMap: YamlMap, private val descriptor: Met
|
|||||||
val token = NameToken(stringKey)
|
val token = NameToken(stringKey)
|
||||||
when (value) {
|
when (value) {
|
||||||
YamlNull -> Meta(Null)
|
YamlNull -> Meta(Null)
|
||||||
is YamlLiteral -> map[token] = Meta(value.content.parseValue())
|
is YamlLiteral -> map[token] = Meta(Value.parse(value.content))
|
||||||
is YamlMap -> map[token] = value.toMeta()
|
is YamlMap -> map[token] = value.toMeta()
|
||||||
is YamlList -> if (value.all { it is YamlLiteral }) {
|
is YamlList -> if (value.all { it is YamlLiteral }) {
|
||||||
val listValue = ListValue(
|
val listValue = ListValue(
|
||||||
value.map {
|
value.map {
|
||||||
//We already checked that all values are primitives
|
//We already checked that all values are primitives
|
||||||
(it as YamlLiteral).content.parseValue()
|
Value.parse((it as YamlLiteral).content)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
map[token] = Meta(listValue)
|
map[token] = Meta(listValue)
|
||||||
@ -75,7 +75,7 @@ private class YamlMeta(private val yamlMap: YamlMap, private val descriptor: Met
|
|||||||
|
|
||||||
public fun YamlElement.toMeta(descriptor: MetaDescriptor? = null): Meta = when (this) {
|
public fun YamlElement.toMeta(descriptor: MetaDescriptor? = null): Meta = when (this) {
|
||||||
YamlNull -> Meta(Null)
|
YamlNull -> Meta(Null)
|
||||||
is YamlLiteral -> Meta(content.parseValue())
|
is YamlLiteral -> Meta(Value.parse(content))
|
||||||
is YamlMap -> toMeta()
|
is YamlMap -> toMeta()
|
||||||
//We can't return multiple items therefore we create top level node
|
//We can't return multiple items therefore we create top level node
|
||||||
is YamlList -> YamlMap(mapOf("@yamlArray" to this)).toMeta(descriptor)
|
is YamlList -> YamlMap(mapOf("@yamlArray" to this)).toMeta(descriptor)
|
||||||
|
@ -88,10 +88,25 @@ public interface IOFormatFactory<T : Any> : Factory<IOFormat<T>>, Named {
|
|||||||
|
|
||||||
public fun <T : Any> Binary(obj: T, format: IOWriter<T>): Binary = Binary { format.writeTo(this, obj) }
|
public fun <T : Any> Binary(obj: T, format: IOWriter<T>): Binary = Binary { format.writeTo(this, obj) }
|
||||||
|
|
||||||
|
public object FloatIOFormat : IOFormat<Float>, IOFormatFactory<Float> {
|
||||||
|
override fun build(context: Context, meta: Meta): IOFormat<Float> = this
|
||||||
|
|
||||||
|
override val name: Name = "float32".asName()
|
||||||
|
|
||||||
|
override val type: KType get() = typeOf<Float>()
|
||||||
|
|
||||||
|
override fun writeTo(sink: Sink, obj: Float) {
|
||||||
|
sink.writeFloat(obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun readFrom(source: Source): Float = source.readFloat()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public object DoubleIOFormat : IOFormat<Double>, IOFormatFactory<Double> {
|
public object DoubleIOFormat : IOFormat<Double>, IOFormatFactory<Double> {
|
||||||
override fun build(context: Context, meta: Meta): IOFormat<Double> = this
|
override fun build(context: Context, meta: Meta): IOFormat<Double> = this
|
||||||
|
|
||||||
override val name: Name = "double".asName()
|
override val name: Name = "float64".asName()
|
||||||
|
|
||||||
override val type: KType get() = typeOf<Double>()
|
override val type: KType get() = typeOf<Double>()
|
||||||
|
|
||||||
@ -99,5 +114,5 @@ public object DoubleIOFormat : IOFormat<Double>, IOFormatFactory<Double> {
|
|||||||
sink.writeLong(obj.toBits())
|
sink.writeLong(obj.toBits())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun readFrom(source: Source): Double = Double.fromBits(source.readLong())
|
override fun readFrom(source: Source): Double = source.readDouble()
|
||||||
}
|
}
|
@ -81,7 +81,7 @@ public fun JsonPrimitive.toValue(descriptor: MetaDescriptor?): Value = when (thi
|
|||||||
content.asValue()
|
content.asValue()
|
||||||
} else {
|
} else {
|
||||||
//consider using LazyParse
|
//consider using LazyParse
|
||||||
content.parseValue()
|
Value.parse(content)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,7 @@ public interface Value {
|
|||||||
ListValue(list)
|
ListValue(list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is DoubleArray -> value.asValue()
|
is DoubleArray -> value.asValue()
|
||||||
is IntArray -> value.asValue()
|
is IntArray -> value.asValue()
|
||||||
is FloatArray -> value.asValue()
|
is FloatArray -> value.asValue()
|
||||||
@ -76,6 +77,41 @@ public interface Value {
|
|||||||
else -> throw IllegalArgumentException("Unrecognized type of the object (${value::class}) converted to Value")
|
else -> throw IllegalArgumentException("Unrecognized type of the object (${value::class}) converted to Value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse value from string. Double-quoted strings are parsed literally. true/false are parsed as booleans
|
||||||
|
*/
|
||||||
|
public fun parse(string: String): Value {
|
||||||
|
|
||||||
|
//Trying to get integer
|
||||||
|
if (string.isEmpty() || string == Null.string) {
|
||||||
|
return Null
|
||||||
|
}
|
||||||
|
|
||||||
|
//string constants
|
||||||
|
if (string.startsWith("\"") && string.endsWith("\"")) {
|
||||||
|
return StringValue(string.substring(1, string.length - 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
string.toIntOrNull()?.let {
|
||||||
|
return NumberValue(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
string.toDoubleOrNull()?.let {
|
||||||
|
return NumberValue(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("true" == string) {
|
||||||
|
return True
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("false" == string) {
|
||||||
|
return False
|
||||||
|
}
|
||||||
|
|
||||||
|
//Give up and return a StringValue
|
||||||
|
return StringValue(string)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +176,7 @@ public class NumberValue(public val number: Number) : Value {
|
|||||||
|
|
||||||
val otherNumber = other.numberOrNull ?: return false
|
val otherNumber = other.numberOrNull ?: return false
|
||||||
|
|
||||||
if(number == otherNumber) return true
|
if (number == otherNumber) return true
|
||||||
|
|
||||||
//Do not change the order of comparison. On JS number is the instance of all types
|
//Do not change the order of comparison. On JS number is the instance of all types
|
||||||
return when (numberOrNull) {
|
return when (numberOrNull) {
|
||||||
@ -228,34 +264,5 @@ public fun <E : Enum<E>> E.asValue(): Value = EnumValue(this)
|
|||||||
/**
|
/**
|
||||||
* Create Value from String using the closest match conversion
|
* Create Value from String using the closest match conversion
|
||||||
*/
|
*/
|
||||||
public fun String.parseValue(): Value {
|
@Deprecated("Use Value.parse(this) instead", ReplaceWith("Value.parse(this)"))
|
||||||
|
public fun String.parseValue(): Value = Value.parse(this)
|
||||||
//Trying to get integer
|
|
||||||
if (isEmpty() || this == Null.string) {
|
|
||||||
return Null
|
|
||||||
}
|
|
||||||
|
|
||||||
//string constants
|
|
||||||
if (startsWith("\"") && endsWith("\"")) {
|
|
||||||
return StringValue(substring(1, length - 2))
|
|
||||||
}
|
|
||||||
|
|
||||||
toIntOrNull()?.let {
|
|
||||||
return NumberValue(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
toDoubleOrNull()?.let {
|
|
||||||
return NumberValue(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("true" == this) {
|
|
||||||
return True
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("false" == this) {
|
|
||||||
return False
|
|
||||||
}
|
|
||||||
|
|
||||||
//Give up and return a StringValue
|
|
||||||
return StringValue(this)
|
|
||||||
}
|
|
@ -5,7 +5,7 @@ package space.kscience.dataforge.meta
|
|||||||
* A value built from string which content and type are parsed on-demand
|
* A value built from string which content and type are parsed on-demand
|
||||||
*/
|
*/
|
||||||
public class LazyParsedValue(public val string: String) : Value {
|
public class LazyParsedValue(public val string: String) : Value {
|
||||||
private val parsedValue by lazy { string.parseValue() }
|
private val parsedValue by lazy { Value.parse(string) }
|
||||||
|
|
||||||
override val value: Any? get() = parsedValue.value
|
override val value: Any? get() = parsedValue.value
|
||||||
override val type: ValueType get() = parsedValue.type
|
override val type: ValueType get() = parsedValue.type
|
||||||
|
@ -6,5 +6,5 @@ kotlin.mpp.stability.nowarn=true
|
|||||||
kotlin.incremental.js.ir=true
|
kotlin.incremental.js.ir=true
|
||||||
kotlin.native.ignoreDisabledTargets=true
|
kotlin.native.ignoreDisabledTargets=true
|
||||||
|
|
||||||
toolsVersion=0.15.0-kotlin-1.9.20-RC2
|
toolsVersion=0.15.0-kotlin-1.9.20
|
||||||
#kotlin.experimental.tryK2=true
|
#kotlin.experimental.tryK2=true
|
@ -1,7 +1,6 @@
|
|||||||
rootProject.name = "dataforge-core"
|
rootProject.name = "dataforge-core"
|
||||||
|
|
||||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||||
//enableFeaturePreview("VERSION_CATALOGS")
|
|
||||||
|
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
|
|
||||||
@ -15,6 +14,7 @@ pluginManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
|
id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0"
|
||||||
id("space.kscience.gradle.project") version toolsVersion
|
id("space.kscience.gradle.project") version toolsVersion
|
||||||
id("space.kscience.gradle.mpp") version toolsVersion
|
id("space.kscience.gradle.mpp") version toolsVersion
|
||||||
id("space.kscience.gradle.jvm") version toolsVersion
|
id("space.kscience.gradle.jvm") version toolsVersion
|
||||||
|
Loading…
Reference in New Issue
Block a user