# 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)