Skip to content

Commit

Permalink
Let ContainsDefinitionsContext dataModels work with DataModelReferenc…
Browse files Browse the repository at this point in the history
…e instead of getter functions.
  • Loading branch information
jurmous committed Feb 17, 2024
1 parent bb90441 commit 09a6060
Show file tree
Hide file tree
Showing 100 changed files with 218 additions and 214 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import maryk.core.properties.definitions.InternalMultiTypeDefinition
import maryk.core.properties.definitions.IsSubDefinition
import maryk.core.properties.definitions.contextual.ContextCaptureDefinition
import maryk.core.properties.definitions.contextual.ContextValueTransformDefinition
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.properties.definitions.list
import maryk.core.properties.enum.IndexedEnumDefinition
import maryk.core.properties.enum.MultiTypeEnumDefinition
Expand Down Expand Up @@ -56,7 +57,7 @@ data class Definitions(
),
capturer = { context, model ->
context?.let {
it.dataModels[model.Meta.name] = { model }
it.dataModels[model.Meta.name] = DataModelReference(model)
} ?: throw ContextNotFoundException()
}
),
Expand All @@ -66,7 +67,7 @@ data class Definitions(
),
capturer = { context, model ->
context?.let {
it.dataModels[model.Meta.name] = { model }
it.dataModels[model.Meta.name] = DataModelReference(model)
} ?: throw ContextNotFoundException()
}
),
Expand All @@ -76,7 +77,7 @@ data class Definitions(
),
capturer = { context: ContainsDefinitionsContext?, model ->
context?.let {
it.dataModels[model.Meta.name] = { model }
it.dataModels[model.Meta.name] = DataModelReference(model)
} ?: throw ContextNotFoundException()
}
),
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package maryk.core.models

import maryk.core.definitions.MarykPrimitive
import maryk.core.models.definitions.IsDataModelDefinition
import maryk.core.models.serializers.IsDataModelSerializer
import maryk.core.properties.IsPropertyContext
import maryk.core.properties.PropertyReferenceMarker
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ class EmbeddedObjectDefinition<DO : Any, DM : IsTypedObjectDataModel<DO, *, CXI,
contextualResolver = { context: ModelContext?, name ->
context?.definitionsContext?.let {
@Suppress("UNCHECKED_CAST")
it.dataModels[name] as? Unit.() -> IsTypedObjectDataModel<*, *, *, *>
it.dataModels[name]?.get as? Unit.() -> IsTypedObjectDataModel<*, *, *, *>
?: throw DefNotFoundException("ObjectDataModel of name $name not found on dataModels")
} ?: throw ContextNotFoundException()
}
Expand All @@ -167,14 +167,14 @@ class EmbeddedObjectDefinition<DO : Any, DM : IsTypedObjectDataModel<DO, *, CXI,
fromSerializable = { ref ->
ref?.get
},
capturer = { context: ModelContext, dataModel: IsDataModelReference<IsTypedObjectDataModel<*, *, *, *>> ->
capturer = { context: ModelContext, dataModelRef: IsDataModelReference<IsTypedObjectDataModel<*, *, *, *>> ->
context.definitionsContext?.let {
if (!it.dataModels.containsKey(dataModel.name)) {
it.dataModels[dataModel.name] = dataModel.get
if (!it.dataModels.containsKey(dataModelRef.name)) {
it.dataModels[dataModelRef.name] = dataModelRef
}
} ?: throw ContextNotFoundException()

context.model = dataModel.get
context.model = dataModelRef.get
}
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ class EmbeddedValuesDefinition<DM : IsValuesDataModel>(
contextualResolver = { context: ContainsDefinitionsContext?, name ->
context?.let {
@Suppress("UNCHECKED_CAST")
it.dataModels[name] as? Unit.() -> IsValuesDataModel
it.dataModels[name]?.get as? Unit.() -> IsValuesDataModel
?: throw DefNotFoundException("ObjectDataModel of name $name not found on dataModels")
} ?: throw ContextNotFoundException()
}
Expand All @@ -184,7 +184,7 @@ class EmbeddedValuesDefinition<DM : IsValuesDataModel>(
capturer = { context: ModelContext, dataModel: IsDataModelReference<IsValuesDataModel> ->
context.definitionsContext?.let {
if (!it.dataModels.containsKey(dataModel.name)) {
it.dataModels[dataModel.name] = dataModel.get
it.dataModels[dataModel.name] = dataModel
}
} ?: throw ContextNotFoundException()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class ReferenceDefinition<DM : IsRootDataModel>(
contextualResolver = { context: ContainsDefinitionsContext?, name ->
context?.let {
@Suppress("UNCHECKED_CAST")
it.dataModels[name] as (Unit.() -> IsRootDataModel)?
it.dataModels[name]?.get as? (Unit.() -> IsRootDataModel)?
?: throw DefNotFoundException("ObjectDataModel of name $name not found on dataModels")
} ?: throw ContextNotFoundException()
}
Expand All @@ -135,7 +135,7 @@ class ReferenceDefinition<DM : IsRootDataModel>(
},
capturer = { context, dataModelRef ->
if (!context.dataModels.containsKey(dataModelRef.name)) {
context.dataModels[dataModelRef.name] = dataModelRef.get
context.dataModels[dataModelRef.name] = dataModelRef
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ data class ValueObjectDefinition<DO : ValueDataObject, DM : IsValueDataModel<DO,
contextualResolver = { context, name ->
context?.definitionsContext?.let {
@Suppress("UNCHECKED_CAST")
it.dataModels[name] as (Unit.() -> IsValueDataModel<*, *>)?
it.dataModels[name]?.get as? (Unit.() -> IsValueDataModel<*, *>)?
?: throw DefNotFoundException("DataModel with name $name not found on dataModels")
} ?: throw ContextNotFoundException()
}
Expand All @@ -151,7 +151,7 @@ data class ValueObjectDefinition<DO : ValueDataObject, DM : IsValueDataModel<DO,
context.let {
context.definitionsContext?.let { modelContext ->
if (!modelContext.dataModels.containsKey(dataModel.name)) {
modelContext.dataModels[dataModel.name] = dataModel.get
modelContext.dataModels[dataModel.name] = dataModel
}
} ?: throw ContextNotFoundException()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package maryk.core.properties.definitions.contextual

import maryk.core.models.IsDataModel
import maryk.core.models.IsRootDataModel
import maryk.core.models.IsStorableDataModel
import maryk.core.models.IsValuesDataModel

interface IsDataModelReference<DM : IsDataModel> {
val name: String
Expand All @@ -12,6 +15,9 @@ class DataModelReference<DM : IsDataModel>(
override val name: String,
override val get: Unit.() -> DM
) : IsDataModelReference<DM> {

constructor(dataModel: DM) : this((dataModel as? IsStorableDataModel<*>)?.Meta?.name ?: dataModel::class.simpleName!!, { dataModel })

override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is IsDataModelReference<*>) return false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package maryk.core.query

import maryk.core.properties.IsPropertyContext
import maryk.core.models.IsDataModel
import maryk.core.properties.definitions.contextual.IsDataModelReference
import maryk.core.properties.enum.IndexedEnum
import maryk.core.properties.enum.IndexedEnumDefinition
import maryk.core.properties.enum.MultiTypeEnum
Expand All @@ -10,7 +10,7 @@ import maryk.core.properties.enum.MultiTypeEnumDefinition
/** Describes a context which contains definitions for models and enums */
interface ContainsDefinitionsContext : IsPropertyContext {
// All found DataModels
val dataModels: MutableMap<String, Unit.() -> IsDataModel>
val dataModels: MutableMap<String, IsDataModelReference<*>>

// For reusing Enums in other parts
val enums: MutableMap<String, IndexedEnumDefinition<IndexedEnum>>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package maryk.core.query

import maryk.core.properties.IsPropertyContext
import maryk.core.models.IsDataModel
import maryk.core.properties.definitions.contextual.IsDataModelReference
import maryk.core.properties.enum.IndexedEnum
import maryk.core.properties.enum.IndexedEnumDefinition
import maryk.core.properties.enum.MultiTypeEnum
import maryk.core.properties.enum.MultiTypeEnumDefinition

/** Saves the context while writing and parsing Definitions */
open class DefinitionsContext(
override val dataModels: MutableMap<String, Unit.() -> IsDataModel> = mutableMapOf(),
override val dataModels: MutableMap<String, IsDataModelReference<*>> = mutableMapOf(),
override val enums: MutableMap<String, IndexedEnumDefinition<IndexedEnum>> = mutableMapOf(),
override var currentDefinitionName: String = "",
override val typeEnums: MutableMap<String, MultiTypeEnumDefinition<MultiTypeEnum<*>>> = mutableMapOf()
Expand Down
5 changes: 3 additions & 2 deletions core/src/commonMain/kotlin/maryk/core/query/RequestContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ package maryk.core.query
import maryk.core.exceptions.RequestException
import maryk.core.inject.Inject
import maryk.core.inject.InjectWithReference
import maryk.core.models.IsObjectDataModel
import maryk.core.models.IsDataModel
import maryk.core.models.IsObjectDataModel
import maryk.core.properties.definitions.IsSerializablePropertyDefinition
import maryk.core.properties.definitions.contextual.IsDataModelReference
import maryk.core.properties.references.AnyPropertyReference
import maryk.core.properties.references.IsPropertyReference
import maryk.core.query.changes.IncMapChange
Expand All @@ -31,7 +32,7 @@ class RequestContext(
) : ContainsDataModelContext<IsDataModel>, ContainsDefinitionsContext by definitionsContext {
/** For test use */
internal constructor(
dataModels: Map<String, Unit.() -> IsDataModel>,
dataModels: Map<String, IsDataModelReference<*>>,
dataModel: IsDataModel? = null,
reference: IsPropertyReference<*, IsSerializablePropertyDefinition<*, *>, *>? = null
) : this(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ internal fun <DM : IsStoreRequest<*, *>> IsObjectDataModel<DM>.addDataModel(
contextualResolver = { context, modelName ->
context?.let {
@Suppress("UNCHECKED_CAST")
it.dataModels[modelName] as (Unit.() -> IsRootDataModel)?
it.dataModels[modelName]?.get as? (Unit.() -> IsRootDataModel)?
?: throw DefNotFoundException("DataModel of name $modelName not found on dataModels")
} ?: throw ContextNotFoundException()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ internal fun <DM : IsDataModelResponse<*>> IsObjectDataModel<DM>.addDataModel(
contextualResolver = { context, name ->
context?.let {
@Suppress("UNCHECKED_CAST")
it.dataModels[name] as (Unit.() -> IsRootDataModel)?
it.dataModels[name]?.get as? (Unit.() -> IsRootDataModel)?
?: throw DefNotFoundException("ObjectDataModel of name $name not found on dataModels")
} ?: throw ContextNotFoundException()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import maryk.core.aggregations.metric.MaxResponse
import maryk.core.aggregations.metric.MinResponse
import maryk.core.aggregations.metric.SumResponse
import maryk.core.aggregations.metric.ValueCountResponse
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
import kotlin.test.Test
Expand Down Expand Up @@ -54,7 +54,7 @@ class AggregationsResponseTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import maryk.core.aggregations.metric.Max
import maryk.core.aggregations.metric.Min
import maryk.core.aggregations.metric.Sum
import maryk.core.aggregations.metric.ValueCount
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.properties.types.DateUnit
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
Expand Down Expand Up @@ -49,7 +49,7 @@ class AggregationsTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import maryk.checkProtoBufConversion
import maryk.checkYamlConversion
import maryk.core.aggregations.AggregationsResponse
import maryk.core.aggregations.metric.SumResponse
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
import kotlin.test.Test
Expand Down Expand Up @@ -41,7 +41,7 @@ class DateHistogramResponseTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import maryk.checkProtoBufConversion
import maryk.checkYamlConversion
import maryk.core.aggregations.Aggregations
import maryk.core.aggregations.metric.Sum
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.properties.types.DateUnit.Months
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
Expand All @@ -25,7 +25,7 @@ class DateHistogramTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import maryk.checkYamlConversion
import maryk.core.aggregations.AggregationsResponse
import maryk.core.aggregations.metric.AverageResponse
import maryk.core.aggregations.metric.SumResponse
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.Option.V1
import maryk.test.models.Option.V2
Expand Down Expand Up @@ -53,7 +53,7 @@ class EnumValuesResponseTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import maryk.checkProtoBufConversion
import maryk.checkYamlConversion
import maryk.core.aggregations.Aggregations
import maryk.core.aggregations.metric.Sum
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
import kotlin.test.Test
Expand All @@ -23,7 +23,7 @@ class EnumValuesTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import maryk.checkYamlConversion
import maryk.core.aggregations.AggregationsResponse
import maryk.core.aggregations.metric.AverageResponse
import maryk.core.aggregations.metric.SumResponse
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.SimpleMarykTypeEnum.S1
import maryk.test.models.SimpleMarykTypeEnum.S2
Expand Down Expand Up @@ -53,7 +53,7 @@ class TypesResponseTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import maryk.checkProtoBufConversion
import maryk.checkYamlConversion
import maryk.core.aggregations.Aggregations
import maryk.core.aggregations.metric.Sum
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
import kotlin.test.Test
Expand All @@ -23,7 +23,7 @@ class TypesTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package maryk.core.aggregations.metric
import maryk.checkJsonConversion
import maryk.checkProtoBufConversion
import maryk.checkYamlConversion
import maryk.core.extensions.toUnitLambda
import maryk.core.properties.definitions.contextual.DataModelReference
import maryk.core.query.RequestContext
import maryk.test.models.TestMarykModel
import kotlin.test.Test
Expand All @@ -24,7 +24,7 @@ class AverageResponseTest {

private val context = RequestContext(
mapOf(
TestMarykModel.Meta.name toUnitLambda { TestMarykModel }
TestMarykModel.Meta.name to DataModelReference(TestMarykModel),
),
dataModel = TestMarykModel
)
Expand Down
Loading

0 comments on commit 09a6060

Please sign in to comment.