Skip to content

Commit 4cd0d24

Browse files
author
Oleg
committed
Add methods to create schema from JsonElement and from IS (jvm)
1 parent d68f3b0 commit 4cd0d24

File tree

4 files changed

+53
-0
lines changed

4 files changed

+53
-0
lines changed

api/json-schema-validator.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,17 @@ public final class com/github/optimumcode/json/schema/ErrorCollector$Companion {
3939
public final class com/github/optimumcode/json/schema/JsonSchema {
4040
public static final field Companion Lcom/github/optimumcode/json/schema/JsonSchema$Companion;
4141
public static final fun fromDefinition (Ljava/lang/String;)Lcom/github/optimumcode/json/schema/JsonSchema;
42+
public static final fun fromJsonElement (Lkotlinx/serialization/json/JsonElement;)Lcom/github/optimumcode/json/schema/JsonSchema;
4243
public final fun validate (Lkotlinx/serialization/json/JsonElement;Lcom/github/optimumcode/json/schema/ErrorCollector;)Z
4344
}
4445

4546
public final class com/github/optimumcode/json/schema/JsonSchema$Companion {
4647
public final fun fromDefinition (Ljava/lang/String;)Lcom/github/optimumcode/json/schema/JsonSchema;
48+
public final fun fromJsonElement (Lkotlinx/serialization/json/JsonElement;)Lcom/github/optimumcode/json/schema/JsonSchema;
49+
}
50+
51+
public final class com/github/optimumcode/json/schema/JsonSchemaStream {
52+
public static final fun fromStream (Lcom/github/optimumcode/json/schema/JsonSchema$Companion;Ljava/io/InputStream;)Lcom/github/optimumcode/json/schema/JsonSchema;
4753
}
4854

4955
public final class com/github/optimumcode/json/schema/ValidationError {

src/commonMain/kotlin/com/github/optimumcode/json/schema/JsonSchema.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ public class JsonSchema internal constructor(
3636
@JvmStatic
3737
public fun fromDefinition(schema: String): JsonSchema {
3838
val schemaElement: JsonElement = Json.parseToJsonElement(schema)
39+
return fromJsonElement(schemaElement)
40+
}
41+
42+
/**
43+
* Loads JSON schema from the [schemaElement] JSON element
44+
*/
45+
@JvmStatic
46+
public fun fromJsonElement(schemaElement: JsonElement): JsonSchema {
3947
return SchemaLoader().load(schemaElement)
4048
}
4149
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@file:JvmName("JsonSchemaStream")
2+
3+
package com.github.optimumcode.json.schema
4+
5+
import kotlinx.serialization.ExperimentalSerializationApi
6+
import kotlinx.serialization.json.Json
7+
import kotlinx.serialization.json.JsonElement
8+
import kotlinx.serialization.json.decodeFromStream
9+
import java.io.InputStream
10+
11+
/**
12+
* Loads JSON schema from provided [input]
13+
*/
14+
@ExperimentalSerializationApi
15+
public fun JsonSchema.Companion.fromStream(input: InputStream): JsonSchema {
16+
// we do not close the IS. It is caller responsibility
17+
val schemaElement = Json.decodeFromStream(JsonElement.serializer(), input)
18+
return fromJsonElement(schemaElement)
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.github.optimumcode.json.schema
2+
3+
import io.kotest.assertions.throwables.shouldNotThrowAny
4+
import io.kotest.core.spec.style.FunSpec
5+
import kotlinx.serialization.ExperimentalSerializationApi
6+
import java.net.URL
7+
8+
@OptIn(ExperimentalSerializationApi::class)
9+
@Suppress("unused")
10+
class JsonSchemaStreamTest : FunSpec() {
11+
init {
12+
test("definition is loaded from input stream") {
13+
shouldNotThrowAny {
14+
URL("https://json-schema.org/draft-07/schema#").openStream().use { input ->
15+
JsonSchema.fromStream(input)
16+
}
17+
}
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)