Moved to mpp structure

This commit is contained in:
Alexander Nozik 2018-09-25 22:35:28 +03:00
parent ad059dea33
commit c1d004ec3e
24 changed files with 248 additions and 165 deletions

View File

@ -24,14 +24,14 @@ buildscript {
description = "The basic interfaces for DataForge meta-data" description = "The basic interfaces for DataForge meta-data"
group 'hep.dataforge' group = 'hep.dataforge'
version '0.1.1-SNAPSHOT' version = '0.1.1-SNAPSHOT'
allprojects { allprojects {
repositories { repositories {
jcenter() jcenter()
maven { url = "http://dl.bintray.com/kotlin/kotlin-eap" } maven { url = "http://dl.bintray.com/kotlin/kotlin-eap" }
maven { url "https://kotlin.bintray.com/kotlinx" } maven { url = "https://kotlin.bintray.com/kotlinx" }
//maven { url 'https://jitpack.io' } //maven { url 'https://jitpack.io' }
} }
} }

View File

@ -0,0 +1,65 @@
plugins {
id 'kotlin-multiplatform'// version '1.3.0-rc-57'
id 'kotlinx-serialization'
}
repositories {
maven { url = 'http://dl.bintray.com/kotlin/kotlin-eap' }
mavenCentral()
}
kotlin {
targets {
fromPreset(presets.jvm, 'jvm')
fromPreset(presets.js, 'js')
// For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64
// For Linux, preset should be changed to e.g. presets.linuxX64
// For MacOS, preset should be changed to e.g. presets.macosX64
//fromPreset(presets.iosX64, 'ios')
}
sourceSets {
commonMain {
dependencies {
implementation project(":dataforge-meta")
implementation "org.jetbrains.kotlin:kotlin-stdlib-common"
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation "org.jetbrains.kotlinx:kotlinx-io:$kotlinx_io_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
}
}
commonTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-common'
implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
}
}
jvmMain {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation "org.jetbrains.kotlinx:kotlinx-io-jvm:$kotlinx_io_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
}
}
jvmTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test'
implementation 'org.jetbrains.kotlin:kotlin-test-junit'
}
}
jsMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-js'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
}
}
jsTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-js'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
}
}
// iosMain {
// }
// iosTest {
// }
}
}

View File

@ -15,12 +15,12 @@ interface MetaFormat {
suspend fun read(input: Input): Meta suspend fun read(input: Input): Meta
} }
/** ///**
* Resolve format by its name. Null if not provided // * Resolve format by its name. Null if not provided
*/ // */
expect fun resolveFormat(name: String): MetaFormat? //expect fun resolveFormat(name: String): MetaFormat?
//
/** ///**
* Resolve format by its binary key. Null if not provided // * Resolve format by its binary key. Null if not provided
*/ // */
expect fun resolveFormat(key: Short): MetaFormat? //expect fun resolveFormat(key: Short): MetaFormat?

View File

@ -0,0 +1,51 @@
package hep.dataforge.meta.io
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaItem
import hep.dataforge.meta.ValueType
import hep.dataforge.meta.boolean
import kotlinx.serialization.Polymorphic
import kotlinx.serialization.Serializable
/*Universal serialization*/
@Serializable
class MetaProxy(val map: Map<String, @Polymorphic MetaItemProxy>)
@Serializable
sealed class MetaItemProxy {
@Serializable
class NumberValueProxy(val number: Number) : MetaItemProxy()
@Serializable
class StringValueProxy(val string: String) : MetaItemProxy()
@Serializable
class BooleanValueProxy(val boolean: Boolean) : MetaItemProxy()
@Serializable
object NullValueProxy : MetaItemProxy()
@Serializable
class SingleMetaProxy(val node: MetaProxy) : MetaItemProxy()
@Serializable
class MetaListProxy(val list: List<@Polymorphic MetaProxy>) : MetaItemProxy()
}
fun Meta.toMap(): MetaProxy {
return MetaProxy(this.items.mapValues { (_, value) ->
when (value) {
is MetaItem.ValueItem<*> -> when (value.value.type) {
ValueType.NUMBER -> MetaItemProxy.NumberValueProxy(value.value.number)
ValueType.STRING -> MetaItemProxy.StringValueProxy(value.value.string)
ValueType.BOOLEAN -> MetaItemProxy.BooleanValueProxy(value.value.boolean)
ValueType.NULL -> MetaItemProxy.NullValueProxy
}
is MetaItem.SingleNodeItem<*> -> MetaItemProxy.SingleMetaProxy(value.node.toMap())
is MetaItem.MultiNodeItem<*> -> MetaItemProxy.MetaListProxy(value.nodes.map { it.toMap() })
}
})
}

View File

@ -1,47 +1,7 @@
package hep.dataforge.meta.io package hep.dataforge.meta.io
import hep.dataforge.meta.* import hep.dataforge.meta.*
import kotlinx.serialization.Serializable import kotlinx.serialization.json.*
/*Universal serialization*/
sealed class MetaItemProxy {
@Serializable
class NumberValueProxy(val number: Number) : MetaItemProxy()
@Serializable
class StringValueProxy(val string: String) : MetaItemProxy()
@Serializable
class BooleanValueProxy(val boolean: Boolean) : MetaItemProxy()
@Serializable
object NullValueProxy : MetaItemProxy()
@Serializable
class MetaProxy(@Serializable val map: Map<String, MetaItemProxy>) : MetaItemProxy()
@Serializable
class MetaListProxy(@Serializable val nodes: List<MetaProxy>) : MetaItemProxy()
}
fun Meta.toMap(): Map<String, MetaItemProxy> {
return this.items.mapValues { (_, value) ->
when (value) {
is MetaItem.ValueItem<*> -> when (value.value.type) {
ValueType.NUMBER -> MetaItemProxy.NumberValueProxy(value.value.number)
ValueType.STRING -> MetaItemProxy.StringValueProxy(value.value.string)
ValueType.BOOLEAN -> MetaItemProxy.BooleanValueProxy(value.value.boolean)
ValueType.NULL -> MetaItemProxy.NullValueProxy
}
is MetaItem.SingleNodeItem<*> -> MetaItemProxy.MetaProxy(value.node.toMap())
is MetaItem.MultiNodeItem<*> -> MetaItemProxy.MetaListProxy(value.nodes.map { MetaItemProxy.MetaProxy(it.toMap()) })
}
}
}
/*Direct JSON serialization*/ /*Direct JSON serialization*/

View File

@ -0,0 +1,47 @@
package io
import hep.dataforge.meta.buildMeta
import hep.dataforge.meta.io.MetaItemProxy
import hep.dataforge.meta.io.toMap
import kotlinx.serialization.json.JSON
import kotlinx.serialization.serializer
import kotlin.test.Test
class MetaItemProxyTest {
@Test
fun testGeneration() {
MetaItemProxy::class.serializer()
}
@Test
fun testProxySerialization() {
val meta = buildMeta {
"a" to 2
"b" to {
"c" to "ddd"
"d" to 2.2
}
}
val json = JSON.indented.stringify(meta.toMap())
println(json)
// val result: Map<String, MetaItemProxy> = JSON.parse(json)
// assertEquals(meta,result.to)
}
// @Test
// fun testJSONSerialization() {
// val meta = buildMeta {
// "a" to 2
// "b" to {
// "c" to "ddd"
// "d" to 2.2
// }
// }
// val json = meta.toJSON()
// println(json)
// val result = json.toMeta()
// assertEquals(meta, result)
// }
}

View File

@ -1,10 +1,63 @@
plugins { plugins {
id 'kotlin-platform-common' id 'kotlin-multiplatform'// version '1.3.0-rc-57'
id 'kotlinx-serialization'
} }
repositories {
maven { url = 'http://dl.bintray.com/kotlin/kotlin-eap' }
mavenCentral()
}
kotlin {
targets {
fromPreset(presets.jvm, 'jvm')
fromPreset(presets.js, 'js')
// For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64
// For Linux, preset should be changed to e.g. presets.linuxX64
// For MacOS, preset should be changed to e.g. presets.macosX64
//fromPreset(presets.iosX64, 'ios')
}
sourceSets {
commonMain {
dependencies { dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-common"
implementation 'org.jetbrains.kotlin:kotlin-reflect'
testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common" implementation "org.jetbrains.kotlinx:kotlinx-io:$kotlinx_io_version"
testCompile "org.jetbrains.kotlin:kotlin-test-common" implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
}
}
commonTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-common'
implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
}
}
jvmMain {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
}
}
jvmTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test'
implementation 'org.jetbrains.kotlin:kotlin-test-junit'
}
}
jsMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-js'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
}
}
jsTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-js'
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
}
}
// iosMain {
// }
// iosTest {
// }
}
} }

View File

@ -1,19 +0,0 @@
plugins{
id 'kotlin-platform-common'
}
dependencies {
compile project(":dataforge-meta")
compile "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
compile "org.jetbrains.kotlinx:kotlinx-io:$kotlinx_io_version"
testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common"
testCompile "org.jetbrains.kotlin:kotlin-test-common"
}
allprojects {
apply plugin: 'kotlinx-serialization'
}

View File

@ -1,10 +0,0 @@
plugins{
id 'kotlin-platform-js'
}
dependencies {
expectedBy project(":dataforge-meta")
compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-js"
}

View File

@ -1,19 +0,0 @@
plugins{
id 'kotlin-platform-jvm'
}
dependencies {
expectedBy project(":dataforge-meta")
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
sourceCompatibility = "1.8"

View File

@ -1,52 +0,0 @@
package hep.dataforge.meta
import kotlin.test.Test
import kotlin.test.assertEquals
class SerializationTest {
@Test
fun testJSONSerialization() {
val meta = buildMeta {
"a" to 2
"b" to {
"c" to "ddd"
"d" to 2.2
}
}
val json = meta.toJSON()
println(json)
val result = json.toMeta()
assertEquals(meta, result)
}
// @Test
// fun testIndirectSerialization() {
// val meta = buildMeta {
// "a" to 2
// "b" to {
// "c" to "ddd"
// "d" to 2.2
// }
// }
// val json = JSON.stringify(meta.toMap())
// println(json)
//// val result = json.toMeta()
//// assertEquals(meta, result)
// }
// @Test
// fun testWeirdSerialization() {
// val meta = buildMeta {
// "a" to 2
// "b" to {
// "c" to "ddd"
// "d" to 2.2
// }
// }
// val json = JSON.stringify(meta.toJSON())
// println(json)
// val result: JsonObject = JSON.parse(json)
// assertEquals(meta, result.toMeta())
// }
}

View File

@ -10,16 +10,23 @@ pluginManagement {
if (requested.id.id == "kotlin-platform-js") { if (requested.id.id == "kotlin-platform-js") {
useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}") useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}")
} }
if (requested.id.id == "kotlin-multiplatform") {
useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}")
} }
} }
} }
repositories {
maven { url = 'http://dl.bintray.com/kotlin/kotlin-eap' }
mavenCentral()
maven { url = 'https://plugins.gradle.org/m2/' }
}
}
rootProject.name = 'dataforge-core' rootProject.name = 'dataforge-core'
include ":dataforge-meta" include ":dataforge-meta"
include ":dataforge-meta:dataforge-meta-jvm" include ":dataforge-meta-io"
include ":dataforge-meta:dataforge-meta-js"
include ":dataforge-meta:dataforge-meta-io"
include ":dataforge-envelope" include ":dataforge-envelope"