skema

serialization

Types

Link copied to clipboard
open class CompactSerializer<T : Any>(val serialName: String, base: KClass<T>, catalog: JsonNodeCatalog = JsonNodeCatalog(), nodes: () -> List<JsonNode>) : KSerializer<T>

Compact JSON form, sealed form elsewhere. Needs polymorphic discriminators and no naming strategy.

Link copied to clipboard
class JsonNode(val type: KClass<*>, val name: String, val shape: JsonNodeShape = JsonNodeShape.Fields, val operands: List<String> = emptyList(), val mapping: JsonPayloadMapping? = null, val fixed: Map<String, JsonElement> = emptyMap(), serializer: () -> KSerializer<*>)

A concrete type and its compact JSON form.

Link copied to clipboard
class JsonNodeCatalog(resolve: (candidates: List<JsonNode>, payload: JsonElement) -> JsonNode? = null, serializers: () -> List<CompactSerializer<*>> = { emptyList() })

Compact vocabularies by name; resolve breaks wire-name ties.

Link copied to clipboard

Wire form of a node's fields.

Link copied to clipboard

Maps a node's fields to and from its payload.

Functions

Link copied to clipboard
inline fun <T : Any> jsonNode(name: String, noinline serializer: () -> KSerializer<T>): JsonNode

Declares a fields node with a custom serializer.

inline fun <T : Any> jsonNode(name: String, shape: JsonNodeShape = JsonNodeShape.Fields, vararg operands: String, mapping: JsonPayloadMapping? = null, fixed: Map<String, JsonElement> = emptyMap()): JsonNode

Declares a node with T's serializer.

Link copied to clipboard
fun CompactSerializer<*>.toJsonSchema(json: Json = SchemaJson): JsonObject

JSON Schema (draft 2020-12) for this vocabulary's compact form.

fun KSerializer<*>.toJsonSchema(catalog: JsonNodeCatalog, json: Json = SchemaJson): JsonObject

JSON Schema (draft 2020-12); catalog must list every compact vocabulary reached.