Schema

interface Schema<T>(source)

Schema representing metadata on values of type T.

The schema of a form is responsible for specifying which validations to run on it, as well as how to "manage" the form data. If a certain form contains a field of, for example, type Int, then there should be a schema of type Schema<Int> that holds the metadata required for knowing how to, for example, initialise said field and validate it.

The form manager uses schemas extensively to, amongst others, initialise data, set data, and validate data; the schema is responsible for specifying how each different type of data is initialised or set.

Inheritors

Properties

Link copied to clipboard
abstract val initialValue: T

Initial value for a value of this schema.

Link copied to clipboard
abstract val typeInfo: TypeInfo

Information about the type of value represented by this schema.

Link copied to clipboard
abstract val validations: List<Validation<T>>

List of validations used to validate this schema.

Functions

Link copied to clipboard
open fun assignableTo(type: KType): Boolean

Whether a value of this schema can be assigned to a variable with the provided type.

Link copied to clipboard
abstract suspend fun change(path: AbsolutePath, value: T, intoValue: Any?, eventsBus: SchemaEventsBus, setValue: suspend (value: T) -> Unit)

Changes value, a value of this schema stored by the form manager into the given value intoValue, sending events about the change through eventsBus. The provided path represents the path of the value being changed within the form manager. The value must be set via setValue, even if it hasn't changed; for parent schemas, it should typically be the same instance of value, but mutated to resemble intoValue.

Link copied to clipboard
abstract suspend fun clone(value: T): T

Returns a clone (deep copy) of value.

Link copied to clipboard
fun Schema<*>.comparePaths(path1: String, path2: String): Int
fun Schema<*>.comparePaths(path1: Path, path2: Path): Int

Compares two paths of a schema according to the order in which children are defined in said schema. Returns a value > 0 if path1 is greater than path2, < 0 if path2 if greater than path1, or 0 otherwise.

Link copied to clipboard
abstract suspend fun destroy(path: AbsolutePath, value: T, eventsBus: SchemaEventsBus, removeValue: suspend (value: T) -> Unit)

Destroys and removes value, a value of this schema stored by the form manager, sending events about the destruction through eventsBus. The provided path represents the path of the value being destroyed within the form manager. removeValue should always be called to remove the value.

Link copied to clipboard
abstract suspend fun init(path: AbsolutePath, fromValue: Any?, eventsBus: SchemaEventsBus, setValue: suspend (value: T) -> Unit)

Initialises and sets a value of this schema from a given value fromValue to be stored by the form manager, sending events about the initialisation of the value through eventsBus. The provided path represents the path of the value being initialised within the form manager. The value must be set via setValue, which should always be called.