gmconfig/README.md
2025-02-26 12:13:13 +01:00

81 lines
1.8 KiB
Markdown

# Gmconfig - A JSON-SCHEMA-based configuration management support library
## Introduction
This library offers the basic support functions for the Gajumaru configuration
management subsystem. It is based on JSON-Schema, and includes, among other things:
* A reasonably complete JSON-Schema validator
* Validating user configurations against the schema
* In-service update of the user config
* Caching of the user config (and schema) as persistent terms
* Fast config lookups using key paths
* Lookups can handle both schema defaults and user-provided defaults
## JSON-Schema validator
The main thing the validator currently doesn't support is proper
management of complex sets of schemas and subSchemas. There are
some preparations made for supporting `"$id"` and uris, but this
is still incomplete. `"definitions"` and `"$ref"` properties are recognized.
As almost anything is theoretically possible with JSON-Schema,
there are surely other things that are unsupported.
### All standard data types
* `"null"`
* `"boolean"`
* `"integer"`
* `"number"`
* `"boolean"`
* `"string"`
* `"array"`
* `"object"`
### Dynamic properties
* `"if"`
* `"not"`
* `"oneOf"`
* `"anyOf"`
* `"allOf"`
### Static Properties
#### Array
* `"maxItems"`
* `"minItems"`
* `"uniqueItems"`
* `"prefixItems"`
* `"contains"` (`"minContains"`, `"maxContains"`)
#### Object
* `"properties"` (`"minProperties"`, `"maxProperties"`)
* `"patternProperties"`
* `"additionalProperties"`
* `"required"`
#### String
* `"pattern"`
* `"minLength"`
* `"maxLength"`
#### Number, Integer
* `"minimum"`
* `"maximum"`
* `"exclusiveMinimum"`
* `"exclusiveMinimum"`
* `"multipleOf"` (only if object is an integer)
### `"$updateSemantics"`
* `"replace"` (fully replaces any old data)
* `"merge"` (for objects, keeps and/or updates existing values)
* `"suggest"` (adds value if not already present)