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

Completions IDE

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

Les schemas JSON generes peuvent etre utilises par les fichiers de configuration TOML, YAML, JSON et JSON5. Ils sont generes depuis le meme type Rust que celui utilise par confique :

#![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,
}
}

Generez-les avec :

#![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>>(())
}

Cela ecrit le schema racine et les schemas de section comme schemas/server.schema.json. Les schemas generes omettent les contraintes required afin que la completion fonctionne pour les fichiers de configuration partiels sans diagnostics de champs manquants. Le schema racine omet les proprietes de sections imbriquees, donc la completion des sections enfants n’est disponible que dans les fichiers qui lient le schema de section correspondant.

Les champs marques x-env-only sont omis des schemas generes, donc les IDE ne suggerent pas les secrets ou autres valeurs qui doivent venir uniquement de variables d environnement.

Les schemas IDE servent a la completion et aux controles d’editeur de base, comme les types, les enums et les controles de proprietes inconnues pris en charge par le schema genere. Ils ne decident pas si une valeur de champ concrete est valide pour l’application. La validation de valeur doit etre implementee dans le code avec #[config(validate = Self::validate)], puis executee par load_config ou config-validate. Les champs obligatoires et la validation finale de la configuration fusionnee utilisent aussi ces chemins d’execution.

TOML

Les fichiers TOML doivent lier le schema avec une directive #:schema en haut du fichier :

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

[server]
bind = "0.0.0.0"
port = 3000

N’utilisez pas de champ racine $schema = "..." dans TOML. Il devient une donnee de configuration reelle et peut affecter la deserialisation d’execution. write_config_templates_with_schema ajoute automatiquement la directive #:schema pour les modeles TOML.

YAML

Les fichiers YAML doivent utiliser la modeline YAML Language Server :

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

server:
  bind: 0.0.0.0
  port: 3000

write_config_templates_with_schema ajoute automatiquement cette modeline pour les modeles YAML. Les modeles YAML separes lient leur schema de section, par exemple log.yaml lie ./schemas/log.schema.json.

JSON

Les fichiers JSON et JSON5 peuvent lier un schema avec un champ racine $schema. write_config_templates_with_schema l’ajoute automatiquement aux modeles JSON et JSON5 generes :

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

Les parametres de l’editeur restent utiles si un projet ne veut pas de liaison dans le fichier :

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

YAML peut aussi etre lie via les parametres VS Code :

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

La disposition finale est :

schemas/myapp.schema.json:
  Champs du fichier racine uniquement

schemas/server.schema.json:
  Schema de la section 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"

References :