Change suspend DataSet.getData
to operator DataSet.get
This commit is contained in:
parent
6b41163ed3
commit
eaa9d40d60
@ -10,6 +10,7 @@
|
|||||||
- `Factory` is now `fun interface` and uses `build` instead of `invoke`. `invoke moved to an extension.
|
- `Factory` is now `fun interface` and uses `build` instead of `invoke`. `invoke moved to an extension.
|
||||||
- KTor 2.0
|
- KTor 2.0
|
||||||
- DataTree `items` call is blocking.
|
- DataTree `items` call is blocking.
|
||||||
|
- DataSet `getData` is no longer suspended and renamed to `get`
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ public class ReduceGroupBuilder<T : Any, R : Any>(
|
|||||||
|
|
||||||
public fun group(
|
public fun group(
|
||||||
groupName: String,
|
groupName: String,
|
||||||
filter: suspend (Name, Data<T>) -> Boolean,
|
filter: (Name, Data<T>) -> Boolean,
|
||||||
action: JoinGroup<T, R>.() -> Unit,
|
action: JoinGroup<T, R>.() -> Unit,
|
||||||
) {
|
) {
|
||||||
groupRules += { source ->
|
groupRules += { source ->
|
||||||
|
@ -28,7 +28,7 @@ public interface DataSet<out T : Any> {
|
|||||||
/**
|
/**
|
||||||
* Get data with given name.
|
* Get data with given name.
|
||||||
*/
|
*/
|
||||||
public suspend fun getData(name: Name): Data<T>?
|
public operator fun get(name: Name): Data<T>?
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,7 +52,7 @@ public interface DataSet<out T : Any> {
|
|||||||
|
|
||||||
override fun flowData(): Flow<NamedData<Nothing>> = emptyFlow()
|
override fun flowData(): Flow<NamedData<Nothing>> = emptyFlow()
|
||||||
|
|
||||||
override suspend fun getData(name: Name): Data<Nothing>? = null
|
override fun get(name: Name): Data<Nothing>? = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -101,4 +101,4 @@ public suspend fun DataSet<*>.toMeta(): Meta = Meta {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public val <T : Any> DataSet<T>.updatesWithData: Flow<NamedData<T>> get() = updates.mapNotNull { getData(it)?.named(it) }
|
public val <T : Any> DataSet<T>.updatesWithData: Flow<NamedData<T>> get() = updates.mapNotNull { get(it)?.named(it) }
|
@ -57,10 +57,10 @@ public interface DataTree<out T : Any> : DataSet<T> {
|
|||||||
override suspend fun listTop(prefix: Name): List<Name> =
|
override suspend fun listTop(prefix: Name): List<Name> =
|
||||||
getItem(prefix).tree?.items?.keys?.map { prefix + it } ?: emptyList()
|
getItem(prefix).tree?.items?.keys?.map { prefix + it } ?: emptyList()
|
||||||
|
|
||||||
override suspend fun getData(name: Name): Data<T>? = when (name.length) {
|
override fun get(name: Name): Data<T>? = when (name.length) {
|
||||||
0 -> null
|
0 -> null
|
||||||
1 -> items[name.firstOrNull()!!].data
|
1 -> items[name.firstOrNull()!!].data
|
||||||
else -> items[name.firstOrNull()!!].tree?.getData(name.cutFirst())
|
else -> items[name.firstOrNull()!!].tree?.get(name.cutFirst())
|
||||||
}
|
}
|
||||||
|
|
||||||
public companion object {
|
public companion object {
|
||||||
@ -73,7 +73,7 @@ public interface DataTree<out T : Any> : DataSet<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public suspend fun <T : Any> DataSet<T>.getData(name: String): Data<T>? = getData(Name.parse(name))
|
public suspend fun <T : Any> DataSet<T>.getData(name: String): Data<T>? = get(Name.parse(name))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a [DataTreeItem] with given [name] or null if the item does not exist
|
* Get a [DataTreeItem] with given [name] or null if the item does not exist
|
||||||
|
@ -50,7 +50,7 @@ public interface GroupRule {
|
|||||||
|
|
||||||
scope.launch {
|
scope.launch {
|
||||||
set.updates.collect { name ->
|
set.updates.collect { name ->
|
||||||
val data = set.getData(name)
|
val data = set.get(name)
|
||||||
|
|
||||||
@Suppress("NULLABLE_EXTENSION_OPERATOR_WITH_SAFE_CALL_RECEIVER")
|
@Suppress("NULLABLE_EXTENSION_OPERATOR_WITH_SAFE_CALL_RECEIVER")
|
||||||
val tagValue = data?.meta?.get(key)?.string ?: defaultTagValue
|
val tagValue = data?.meta?.get(key)?.string ?: defaultTagValue
|
||||||
|
@ -17,7 +17,7 @@ import kotlin.reflect.KType
|
|||||||
* A stateless filtered [DataSet]
|
* A stateless filtered [DataSet]
|
||||||
*/
|
*/
|
||||||
public fun <T : Any> DataSet<T>.filter(
|
public fun <T : Any> DataSet<T>.filter(
|
||||||
predicate: suspend (Name, Data<T>) -> Boolean,
|
predicate: (Name, Data<T>) -> Boolean,
|
||||||
): ActiveDataSet<T> = object : ActiveDataSet<T> {
|
): ActiveDataSet<T> = object : ActiveDataSet<T> {
|
||||||
|
|
||||||
override val dataType: KType get() = this@filter.dataType
|
override val dataType: KType get() = this@filter.dataType
|
||||||
@ -27,12 +27,12 @@ public fun <T : Any> DataSet<T>.filter(
|
|||||||
override fun flowData(): Flow<NamedData<T>> =
|
override fun flowData(): Flow<NamedData<T>> =
|
||||||
this@filter.flowData().filter { predicate(it.name, it.data) }
|
this@filter.flowData().filter { predicate(it.name, it.data) }
|
||||||
|
|
||||||
override suspend fun getData(name: Name): Data<T>? = this@filter.getData(name)?.takeIf {
|
override fun get(name: Name): Data<T>? = this@filter.get(name)?.takeIf {
|
||||||
predicate(name, it)
|
predicate(name, it)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val updates: Flow<Name> = this@filter.updates.filter flowFilter@{ name ->
|
override val updates: Flow<Name> = this@filter.updates.filter flowFilter@{ name ->
|
||||||
val theData = this@filter.getData(name) ?: return@flowFilter false
|
val theData = this@filter.get(name) ?: return@flowFilter false
|
||||||
predicate(name, theData)
|
predicate(name, theData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,8 +50,8 @@ else object : ActiveDataSet<T> {
|
|||||||
|
|
||||||
override fun flowData(): Flow<NamedData<T>> = this@withNamePrefix.flowData().map { it.data.named(prefix + it.name) }
|
override fun flowData(): Flow<NamedData<T>> = this@withNamePrefix.flowData().map { it.data.named(prefix + it.name) }
|
||||||
|
|
||||||
override suspend fun getData(name: Name): Data<T>? =
|
override fun get(name: Name): Data<T>? =
|
||||||
name.removeHeadOrNull(name)?.let { this@withNamePrefix.getData(it) }
|
name.removeHeadOrNull(name)?.let { this@withNamePrefix.get(it) }
|
||||||
|
|
||||||
override val updates: Flow<Name> get() = this@withNamePrefix.updates.map { prefix + it }
|
override val updates: Flow<Name> get() = this@withNamePrefix.updates.map { prefix + it }
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ public fun <T : Any> DataSet<T>.branch(branchName: Name): DataSet<T> = if (branc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getData(name: Name): Data<T>? = this@branch.getData(branchName + name)
|
override fun get(name: Name): Data<T>? = this@branch.get(branchName + name)
|
||||||
|
|
||||||
override val updates: Flow<Name> get() = this@branch.updates.mapNotNull { it.removeHeadOrNull(branchName) }
|
override val updates: Flow<Name> get() = this@branch.updates.mapNotNull { it.removeHeadOrNull(branchName) }
|
||||||
}
|
}
|
||||||
@ -80,5 +80,5 @@ public fun <T : Any> DataSet<T>.branch(branchName: Name): DataSet<T> = if (branc
|
|||||||
public fun <T : Any> DataSet<T>.branch(branchName: String): DataSet<T> = this@branch.branch(Name.parse(branchName))
|
public fun <T : Any> DataSet<T>.branch(branchName: String): DataSet<T> = this@branch.branch(Name.parse(branchName))
|
||||||
|
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
public suspend fun <T : Any> DataSet<T>.rootData(): Data<T>? = getData(Name.EMPTY)
|
public suspend fun <T : Any> DataSet<T>.rootData(): Data<T>? = get(Name.EMPTY)
|
||||||
|
|
||||||
|
@ -35,6 +35,6 @@ context(DataSetBuilder<T>) public fun <T : Any> CoroutineScope.setAndWatch(
|
|||||||
): Job = launch {
|
): Job = launch {
|
||||||
node(name, dataSet)
|
node(name, dataSet)
|
||||||
dataSet.updates.collect { nameInBranch ->
|
dataSet.updates.collect { nameInBranch ->
|
||||||
data(name + nameInBranch, dataSet.getData(nameInBranch))
|
data(name + nameInBranch, dataSet.get(nameInBranch))
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -52,12 +52,12 @@ public fun <R : Any> DataSet<*>.select(
|
|||||||
it as NamedData<R>
|
it as NamedData<R>
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getData(name: Name): Data<R>? = this@select.getData(name)?.let { datum ->
|
override fun get(name: Name): Data<R>? = this@select.get(name)?.let { datum ->
|
||||||
if (checkDatum(name, datum)) datum.castOrNull(type) else null
|
if (checkDatum(name, datum)) datum.castOrNull(type) else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override val updates: Flow<Name> = this@select.updates.filter {
|
override val updates: Flow<Name> = this@select.updates.filter {
|
||||||
val datum = this@select.getData(it) ?: return@filter false
|
val datum = this@select.get(it) ?: return@filter false
|
||||||
checkDatum(it, datum)
|
checkDatum(it, datum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,11 +73,11 @@ public inline fun <reified R : Any> DataSet<*>.select(
|
|||||||
/**
|
/**
|
||||||
* Select a single datum if it is present and of given [type]
|
* Select a single datum if it is present and of given [type]
|
||||||
*/
|
*/
|
||||||
public suspend fun <R : Any> DataSet<*>.selectOne(type: KType, name: Name): NamedData<R>? =
|
public fun <R : Any> DataSet<*>.selectOne(type: KType, name: Name): NamedData<R>? =
|
||||||
getData(name)?.castOrNull<R>(type)?.named(name)
|
get(name)?.castOrNull<R>(type)?.named(name)
|
||||||
|
|
||||||
public suspend inline fun <reified R : Any> DataSet<*>.selectOne(name: Name): NamedData<R>? =
|
public inline fun <reified R : Any> DataSet<*>.selectOne(name: Name): NamedData<R>? =
|
||||||
selectOne(typeOf<R>(), name)
|
selectOne(typeOf<R>(), name)
|
||||||
|
|
||||||
public suspend inline fun <reified R : Any> DataSet<*>.selectOne(name: String): NamedData<R>? =
|
public inline fun <reified R : Any> DataSet<*>.selectOne(name: String): NamedData<R>? =
|
||||||
selectOne(typeOf<R>(), Name.parse(name))
|
selectOne(typeOf<R>(), Name.parse(name))
|
@ -88,9 +88,8 @@ public fun EnvelopeFormat.readFile(path: Path): Envelope {
|
|||||||
*/
|
*/
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
public inline fun <reified T : Any> IOPlugin.resolveIOFormat(): IOFormat<T>? {
|
public inline fun <reified T : Any> IOPlugin.resolveIOFormat(): IOFormat<T>? =
|
||||||
return ioFormatFactories.find { it.type.isSupertypeOf(typeOf<T>()) } as IOFormat<T>?
|
ioFormatFactories.find { it.type.isSupertypeOf(typeOf<T>()) } as IOFormat<T>?
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read file containing meta using given [formatOverride] or file extension to infer meta type.
|
* Read file containing meta using given [formatOverride] or file extension to infer meta type.
|
||||||
|
@ -26,7 +26,7 @@ public interface TaskResult<out T : Any> : DataSet<T> {
|
|||||||
public val taskMeta: Meta
|
public val taskMeta: Meta
|
||||||
|
|
||||||
override fun flowData(): Flow<TaskData<T>>
|
override fun flowData(): Flow<TaskData<T>>
|
||||||
override suspend fun getData(name: Name): TaskData<T>?
|
override fun get(name: Name): TaskData<T>?
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TaskResultImpl<out T : Any>(
|
private class TaskResultImpl<out T : Any>(
|
||||||
@ -40,7 +40,7 @@ private class TaskResultImpl<out T : Any>(
|
|||||||
workspace.wrapData(it, it.name, taskName, taskMeta)
|
workspace.wrapData(it, it.name, taskName, taskMeta)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getData(name: Name): TaskData<T>? = dataSet.getData(name)?.let {
|
override fun get(name: Name): TaskData<T>? = dataSet.get(name)?.let {
|
||||||
workspace.wrapData(it, name, taskName, taskMeta)
|
workspace.wrapData(it, name, taskName, taskMeta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ public interface Workspace : ContextAware, Provider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public suspend fun produceData(taskName: Name, taskMeta: Meta, name: Name): TaskData<*>? =
|
public suspend fun produceData(taskName: Name, taskMeta: Meta, name: Name): TaskData<*>? =
|
||||||
produce(taskName, taskMeta).getData(name)
|
produce(taskName, taskMeta).get(name)
|
||||||
|
|
||||||
public companion object {
|
public companion object {
|
||||||
public const val TYPE: String = "workspace"
|
public const val TYPE: String = "workspace"
|
||||||
|
@ -103,7 +103,7 @@ class SimpleWorkspaceTest {
|
|||||||
val squareData = from(square)
|
val squareData = from(square)
|
||||||
val linearData = from(linear)
|
val linearData = from(linear)
|
||||||
squareData.forEach { data ->
|
squareData.forEach { data ->
|
||||||
val newData: Data<Int> = data.combine(linearData.getData(data.name)!!) { l, r ->
|
val newData: Data<Int> = data.combine(linearData.get(data.name)!!) { l, r ->
|
||||||
l + r
|
l + r
|
||||||
}
|
}
|
||||||
data(data.name, newData)
|
data(data.name, newData)
|
||||||
|
Loading…
Reference in New Issue
Block a user