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-kompletteringar

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

Genererade JSON Schemas kan anvandas av TOML-, YAML-, JSON- och JSON5-konfigurationsfiler. De genereras fran samma Rust-typ som anvands av 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,
}
}

Generera dem med:

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

Detta skriver rotschemat och sektionsscheman som schemas/server.schema.json. Genererade scheman utelamnar required-begransningar sa komplettering fungerar for partiella konfigurationsfiler utan diagnostik for saknade falt. Rotschemat utelamnar delade sektionsproperties, sa barnsektionskomplettering ar bara tillganglig i filer som binder matchande sektionsschema. Omarkerade nastlade sektioner stannar i rotschemat.

Falt markerade med x-env-only utelamnas fran genererade scheman, sa IDE:er foreslar inte secrets eller andra varden som bara ska komma fran miljovariabler.

IDE-scheman ar for komplettering och grundlaggande editor-kontroller, som typ, enum och okanda properties som stods av det genererade schemat. De avgor inte om ett konkret faltvarde ar giltigt for programmet. Faltvardevalidering ska implementeras i kod med #[config(validate = Self::validate)] och koras via load_config eller config-validate. Obligatoriska falt och slutlig sammanslagen konfigurationsvalidering anvander ocksa dessa runtime-vagar.

TOML

TOML-filer bor binda schemat med ett #:schema-direktiv hogst upp:

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

[server]
bind = "0.0.0.0"
port = 3000

Anvand inte ett rot-$schema = "..."-falt i TOML. Det blir riktig konfigurationsdata och kan paverka runtime-deserialisering. write_config_templates_with_schema lagger automatiskt till #:schema- direktivet for TOML-mallar.

YAML

YAML-filer bor anvanda YAML Language Servers modeline:

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

server:
  bind: 0.0.0.0
  port: 3000

write_config_templates_with_schema lagger automatiskt till denna modeline for YAML-mallar. Delade YAML-mallar binder sitt sektionsschema, till exempel binder log.yaml ./schemas/log.schema.json.

JSON

JSON- och JSON5-filer kan binda ett schema med ett rotfalt $schema. write_config_templates_with_schema lagger till det automatiskt for genererade JSON- och JSON5-mallar:

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

Editor-installningar ar fortfarande anvandbara nar ett projekt inte vill ha bindning i filen:

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

YAML kan ocksa bindas via VS Code-installningar:

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

Den slutliga layouten ar:

schemas/myapp.schema.json:
  Endast rotfilens falt

schemas/server.schema.json:
  Schema for sektionen 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"

Referenser: