Skip to content

Commit 4c6b815

Browse files
committed
Inctoduce abstraction for validated elements
1 parent 66d118a commit 4c6b815

File tree

67 files changed

+393
-189
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+393
-189
lines changed

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/FormatValidator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.optimumcode.json.schema
22

3+
import io.github.optimumcode.json.schema.model.AbstractElement
34
import kotlinx.serialization.json.JsonElement
45
import kotlin.jvm.JvmStatic
56

@@ -16,7 +17,7 @@ public interface FormatValidator {
1617
* @param element JSON element to validate against the expected format
1718
* @return the result of the validation
1819
*/
19-
public fun validate(element: JsonElement): FormatValidationResult
20+
public fun validate(element: AbstractElement): FormatValidationResult
2021

2122
public companion object {
2223
@Suppress("ktlint:standard:function-naming", "FunctionName")

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/JsonSchema.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import io.github.optimumcode.json.schema.internal.DefaultAssertionContext
66
import io.github.optimumcode.json.schema.internal.DefaultReferenceResolver
77
import io.github.optimumcode.json.schema.internal.IsolatedLoader
88
import io.github.optimumcode.json.schema.internal.JsonSchemaAssertion
9+
import io.github.optimumcode.json.schema.internal.wrapper.wrap
910
import kotlinx.serialization.json.JsonElement
1011
import kotlin.jvm.JvmOverloads
1112
import kotlin.jvm.JvmStatic
@@ -31,7 +32,7 @@ public class JsonSchema internal constructor(
3132
): Boolean {
3233
val context = DefaultAssertionContext(JsonPointer.ROOT, referenceResolver)
3334
return DelegateOutputCollector(errorCollector).use {
34-
assertion.validate(value, context, this)
35+
assertion.validate(value.wrap(), context, this)
3536
}
3637
}
3738

@@ -49,7 +50,7 @@ public class JsonSchema internal constructor(
4950
val context = DefaultAssertionContext(JsonPointer.ROOT, referenceResolver)
5051
val collector = outputCollectorProvider.get()
5152
collector.use {
52-
assertion.validate(value, context, this)
53+
assertion.validate(value.wrap(), context, this)
5354
}
5455
return collector.output
5556
}

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/extension/ExternalAssertion.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.optimumcode.json.schema.extension
22

33
import io.github.optimumcode.json.schema.ErrorCollector
4-
import kotlinx.serialization.json.JsonElement
4+
import io.github.optimumcode.json.schema.model.AbstractElement
55

66
/**
77
* This interface allows you to implement your own schema assertion.
@@ -25,7 +25,7 @@ public interface ExternalAssertion {
2525
* @return `true` if element is valid against assertion. Otherwise, returns `false`
2626
*/
2727
public fun validate(
28-
element: JsonElement,
28+
element: AbstractElement,
2929
context: ExternalAssertionContext,
3030
errorCollector: ErrorCollector,
3131
): Boolean

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/BooleanSchemaAssertion.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package io.github.optimumcode.json.schema.internal
33
import io.github.optimumcode.json.pointer.JsonPointer
44
import io.github.optimumcode.json.schema.OutputCollector
55
import io.github.optimumcode.json.schema.ValidationError
6-
import kotlinx.serialization.json.JsonElement
6+
import io.github.optimumcode.json.schema.model.AbstractElement
77

88
internal class FalseSchemaAssertion(
99
private val path: JsonPointer,
1010
) : JsonSchemaAssertion {
1111
override fun validate(
12-
element: JsonElement,
12+
element: AbstractElement,
1313
context: AssertionContext,
1414
errorCollector: OutputCollector<*>,
1515
): Boolean {
@@ -28,7 +28,7 @@ internal class FalseSchemaAssertion(
2828

2929
internal object TrueSchemaAssertion : JsonSchemaAssertion {
3030
override fun validate(
31-
element: JsonElement,
31+
element: AbstractElement,
3232
context: AssertionContext,
3333
errorCollector: OutputCollector<*>,
3434
): Boolean {

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/JsonSchemaAssertion.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.optimumcode.json.schema.internal
22

33
import io.github.optimumcode.json.schema.OutputCollector
4-
import kotlinx.serialization.json.JsonElement
4+
import io.github.optimumcode.json.schema.model.AbstractElement
55

66
internal interface JsonSchemaAssertion {
77
/**
@@ -20,7 +20,7 @@ internal interface JsonSchemaAssertion {
2020
* @return `true` if element is valid against assertion. Otherwise, returns `false`
2121
*/
2222
fun validate(
23-
element: JsonElement,
23+
element: AbstractElement,
2424
context: AssertionContext,
2525
errorCollector: OutputCollector<*>,
2626
): Boolean

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/JsonSchemaRoot.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package io.github.optimumcode.json.schema.internal
33
import com.eygraber.uri.Uri
44
import io.github.optimumcode.json.pointer.JsonPointer
55
import io.github.optimumcode.json.schema.OutputCollector
6-
import kotlinx.serialization.json.JsonElement
6+
import io.github.optimumcode.json.schema.model.AbstractElement
77

88
internal class JsonSchemaRoot(
99
private val scopeId: Uri,
@@ -12,7 +12,7 @@ internal class JsonSchemaRoot(
1212
private val canBeReferencedRecursively: Boolean,
1313
) : JsonSchemaAssertion {
1414
override fun validate(
15-
element: JsonElement,
15+
element: AbstractElement,
1616
context: AssertionContext,
1717
errorCollector: OutputCollector<*>,
1818
): Boolean {

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/RecursiveRefSchemaAssertion.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import io.github.optimumcode.json.pointer.plus
55
import io.github.optimumcode.json.pointer.relative
66
import io.github.optimumcode.json.schema.AbsoluteLocation
77
import io.github.optimumcode.json.schema.OutputCollector
8-
import kotlinx.serialization.json.JsonElement
8+
import io.github.optimumcode.json.schema.model.AbstractElement
99

1010
internal class RecursiveRefSchemaAssertion(
1111
private val basePath: JsonPointer,
1212
private val refId: RefId,
1313
) : JsonSchemaAssertion {
1414
override fun validate(
15-
element: JsonElement,
15+
element: AbstractElement,
1616
context: AssertionContext,
1717
errorCollector: OutputCollector<*>,
1818
): Boolean {

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/RefSchemaAssertion.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import io.github.optimumcode.json.pointer.plus
66
import io.github.optimumcode.json.pointer.relative
77
import io.github.optimumcode.json.schema.AbsoluteLocation
88
import io.github.optimumcode.json.schema.OutputCollector
9-
import kotlinx.serialization.json.JsonElement
9+
import io.github.optimumcode.json.schema.model.AbstractElement
1010

1111
internal class RefSchemaAssertion(
1212
private val basePath: JsonPointer,
@@ -17,7 +17,7 @@ internal class RefSchemaAssertion(
1717
private lateinit var refAbsolutePath: Uri
1818

1919
override fun validate(
20-
element: JsonElement,
20+
element: AbstractElement,
2121
context: AssertionContext,
2222
errorCollector: OutputCollector<*>,
2323
): Boolean {

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/factories/ExternalAssertionFactoryAdapter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import io.github.optimumcode.json.schema.extension.ExternalAssertionFactory
77
import io.github.optimumcode.json.schema.internal.AssertionContext
88
import io.github.optimumcode.json.schema.internal.JsonSchemaAssertion
99
import io.github.optimumcode.json.schema.internal.LoadingContext
10+
import io.github.optimumcode.json.schema.model.AbstractElement
1011
import kotlinx.serialization.json.JsonElement
1112

1213
internal class ExternalAssertionFactoryAdapter(
@@ -25,7 +26,7 @@ private class ExternalAssertionAdapter(
2526
private val externalAssertion: ExternalAssertion,
2627
) : JsonSchemaAssertion {
2728
override fun validate(
28-
element: JsonElement,
29+
element: AbstractElement,
2930
context: AssertionContext,
3031
errorCollector: OutputCollector<*>,
3132
): Boolean =

json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/factories/array/AdditionalItemsAssertion.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import io.github.optimumcode.json.schema.AnnotationKey
55
import io.github.optimumcode.json.schema.OutputCollector
66
import io.github.optimumcode.json.schema.internal.AssertionContext
77
import io.github.optimumcode.json.schema.internal.JsonSchemaAssertion
8-
import kotlinx.serialization.json.JsonArray
9-
import kotlinx.serialization.json.JsonElement
8+
import io.github.optimumcode.json.schema.model.AbstractElement
9+
import io.github.optimumcode.json.schema.model.ArrayElement
1010

1111
internal class AdditionalItemsAssertion(
1212
private val location: JsonPointer,
@@ -16,12 +16,12 @@ internal class AdditionalItemsAssertion(
1616
private val returnIfNoIndex: Boolean,
1717
) : JsonSchemaAssertion {
1818
override fun validate(
19-
element: JsonElement,
19+
element: AbstractElement,
2020
context: AssertionContext,
2121
errorCollector: OutputCollector<*>,
2222
): Boolean {
2323
return errorCollector.updateKeywordLocation(location).use {
24-
if (element !is JsonArray) {
24+
if (element !is ArrayElement) {
2525
return@use true
2626
}
2727
val lastProcessedIndex: Int =

0 commit comments

Comments
 (0)