Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

IDE-completions

English | 中文 | 日本語 | 한국어 | Français | Deutsch | Español | Português | Svenska | Suomi | Nederlands

Gegenereerde JSON Schemas kunnen worden gebruikt door TOML-, YAML-, JSON- en JSON5-configuratiebestanden. Ze worden gegenereerd uit hetzelfde Rust-type dat door confique wordt gebruikt:

#![allow(unused)]
fn main() {
use confique::Config;
use schemars::JsonSchema;

#[derive(Debug, Config, JsonSchema)]
struct AppConfig {
    #[config(nested)]
    #[schemars(extend("x-tree-split" = true))]
    server: ServerConfig,
}
}

Genereer ze met:

#![allow(unused)]
fn main() {
use rust_config_tree::write_config_schemas;

write_config_schemas::<AppConfig>("schemas/myapp.schema.json")?;
Ok::<(), Box<dyn std::error::Error + Send + Sync>>(())
}

Dit schrijft het rootschema en sectieschema’s zoals schemas/server.schema.json. Gegenereerde schema’s laten required- constraints weg, zodat completion werkt voor gedeeltelijke configuratiebestanden zonder diagnostics voor ontbrekende velden. Het rootschema laat geneste sectie-eigenschappen weg, zodat completion voor kindsecties alleen beschikbaar is in bestanden die het passende sectieschema koppelen.

Velden gemarkeerd met x-env-only worden uit gegenereerde schemas weggelaten, zodat IDEs geen secrets of andere waarden voorstellen die alleen uit omgevingsvariabelen mogen komen.

IDE-schema’s zijn voor completion en basale editorcontroles, zoals type-, enum- en onbekende-eigenschapcontroles die door het gegenereerde schema worden ondersteund. Ze bepalen niet of een concrete veldwaarde geldig is voor de toepassing. Veldwaardevalidatie moet in code worden geimplementeerd met #[config(validate = Self::validate)] en wordt uitgevoerd via load_config of config-validate. Verplichte velden en uiteindelijke samengevoegde configuratievalidatie gebruiken ook die runtimepaden.

TOML

TOML-bestanden moeten het schema koppelen met een #:schema-directive bovenaan het bestand:

#:schema ./schemas/myapp.schema.json

[server]
bind = "0.0.0.0"
port = 3000

Gebruik geen rootveld $schema = "..." in TOML. Het wordt echte configuratiedata en kan runtime-deserialisatie beinvloeden. write_config_templates_with_schema voegt de #:schema-directive automatisch toe voor TOML-sjablonen.

YAML

YAML-bestanden moeten de YAML Language Server-modeline gebruiken:

# yaml-language-server: $schema=./schemas/myapp.schema.json

server:
  bind: 0.0.0.0
  port: 3000

write_config_templates_with_schema voegt deze modeline automatisch toe voor YAML-sjablonen. Gesplitste YAML-sjablonen koppelen hun sectieschema, bijvoorbeeld log.yaml koppelt ./schemas/log.schema.json.

JSON

JSON- en JSON5-bestanden kunnen een schema koppelen met een rootveld $schema. write_config_templates_with_schema voegt dit automatisch toe aan gegenereerde JSON- en JSON5-sjablonen:

{
  "$schema": "./schemas/myapp.schema.json"
}

Editorinstellingen blijven nuttig wanneer een project geen binding in het bestand wil:

{
  "json.schemas": [
    {
      "fileMatch": [
        "/config.json",
        "/config.*.json",
        "/deploy/*.json"
      ],
      "url": "./schemas/myapp.schema.json"
    }
  ]
}

YAML kan ook via VS Code-instellingen worden gekoppeld:

{
  "yaml.schemas": {
    "./schemas/myapp.schema.json": [
      "config.yaml",
      "config.*.yaml",
      "deploy/*.yaml"
    ]
  }
}

De uiteindelijke indeling is:

schemas/myapp.schema.json:
  Alleen velden van het rootbestand

schemas/server.schema.json:
  Schema voor de sectie server

config.toml:
  #:schema ./schemas/myapp.schema.json

config.yaml:
  # yaml-language-server: $schema=./schemas/myapp.schema.json

server.yaml:
  # yaml-language-server: $schema=./schemas/server.schema.json

config.json:
  "$schema": "./schemas/myapp.schema.json"

Referenties: