Sjabloongeneratie
English | 中文 | 日本語 | 한국어 | Français | Deutsch | Español | Português | Svenska | Suomi | Nederlands
Sjablonen worden gegenereerd uit hetzelfde confique-schema dat runtime wordt
gebruikt. confique rendert de daadwerkelijke sjablooninhoud, inclusief
doccomments, defaults, verplichte velden en gedeclareerde omgevingsvariabelen.
Gebruik write_config_templates:
#![allow(unused)]
fn main() {
use rust_config_tree::write_config_templates;
write_config_templates::<AppConfig>("config.yaml", "config.example.yaml")?;
Ok::<(), Box<dyn std::error::Error + Send + Sync>>(())
}
Genereer Draft 7 JSON Schemas voor de rootconfiguratie en gesplitste geneste secties:
#![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>>(())
}
Markeer een genest veld met #[schemars(extend("x-tree-split" = true))]
wanneer het als eigen *.yaml-sjabloon en eigen
<section>.schema.json-schema moet worden gegenereerd. Ongemarkeerde geneste
velden blijven in het oudersjabloon en het ouderschema.
Markeer een leafveld met #[schemars(extend("x-env-only" = true))] wanneer de waarde alleen uit omgevingsvariabelen mag komen. Gegenereerde sjablonen en JSON Schemas laten env-only velden weg, en lege bovenliggende objecten die daardoor overblijven worden verwijderd.
Gegenereerde schema’s laten required-constraints weg. IDE’s kunnen nog steeds
completion bieden, maar gedeeltelijke bestanden zoals log.yaml
rapporteren geen ontbrekende rootvelden. Het rootschema vult alleen velden aan
die in het rootbestand thuishoren; gesplitste sectievelden worden daar weggelaten
en door hun eigen sectieschema’s aangevuld. Aanwezige velden kunnen nog steeds
basale editorcontroles krijgen, zoals type-, enum- en onbekende-eigenschapcontroles
die door het gegenereerde schema worden ondersteund. Gegenereerde
*.schema.json-bestanden bepalen niet of een concrete veldwaarde geldig is voor
de toepassing. Veldwaardevalidatie moet in code worden geimplementeerd met
#[config(validate = Self::validate)]; load_config en config-validate
voeren die runtimevalidatie uit.
Koppel die schema’s vanuit gegenereerde TOML-, YAML-, JSON- en JSON5-sjablonen:
#![allow(unused)]
fn main() {
use rust_config_tree::write_config_templates_with_schema;
write_config_templates_with_schema::<AppConfig>(
"config.toml",
"config.example.toml",
"schemas/myapp.schema.json",
)?;
Ok::<(), Box<dyn std::error::Error + Send + Sync>>(())
}
TOML- en YAML-rootsjablonen koppelen het rootschema en vullen geen velden van
gesplitste kindsecties aan. Gesplitste sectie-YAML-sjablonen koppelen hun
sectieschema. JSON- en JSON5-sjablonen krijgen een rootveld $schema dat
VS Code kan herkennen. VS Code json.schemas blijft een alternatieve
koppelingsroute.
Het uitvoerformaat wordt afgeleid uit het uitvoerpad:
.yamlen.ymlgenereren YAML..tomlgenereert TOML..jsonen.json5genereren JSON5-compatibele sjablonen.- onbekende of ontbrekende extensies genereren YAML.
Schemabindingen
Met een schemapad van schemas/myapp.schema.json gebruiken gegenereerde
rootsjablonen:
#:schema ./schemas/myapp.schema.json
# yaml-language-server: $schema=./schemas/myapp.schema.json
Gegenereerde sectiesjablonen koppelen sectieschema’s:
# log.yaml
# yaml-language-server: $schema=./schemas/log.schema.json
Gegenereerde JSON- en JSON5-sjablonen schrijven een rootveld $schema dat
VS Code herkent. Editorinstellingen blijven optioneel:
{
"json.schemas": [
{
"fileMatch": [
"/config.json",
"/config.*.json"
],
"url": "./schemas/myapp.schema.json"
}
]
}
Selectie van sjabloonbron
Sjabloongeneratie kiest de bronboom in deze volgorde:
- Bestaand configuratiepad.
- Bestaand uitvoersjabloonpad.
- Uitvoerpad behandeld als een nieuwe lege sjabloonboom.
Daardoor kan een project sjablonen bijwerken vanuit huidige configuratiebestanden, een bestaande sjabloonset bijwerken of een nieuwe sjabloonset maken vanuit alleen het schema.
Gespiegelde include-bomen
Als het bronbestand includes declareert, spiegelen gegenereerde sjablonen die include-paden onder de uitvoerdirectory.
# config.yaml
include:
- server.yaml
Het genereren van config.example.yaml schrijft:
config.example.yaml
server.yaml
Relatieve include-doelen worden gespiegeld onder de parentdirectory van het uitvoerbestand. Absolute include-doelen blijven absoluut.
Opt-in sectiesplitsing
Wanneer een bronbestand geen includes heeft, kan de crate include-doelen
afleiden uit geneste schemaselecties gemarkeerd met x-tree-split. Voor een schema met een gemarkeerde server-sectie
kan een leeg rootsjabloon bijvoorbeeld produceren:
config.example.yaml
server.yaml
Het rootsjabloon krijgt een include-blok en server.yaml bevat alleen
de server-sectie. Geneste secties worden alleen recursief gesplitst wanneer die velden ook x-tree-split dragen.