Skip to content

Commit 9abf9c3

Browse files
author
developerworks
committed
同步文档与发布说明
1 parent c6e8872 commit 9abf9c3

56 files changed

Lines changed: 484 additions & 267 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,10 @@ All notable changes to `rust-config-tree` are documented in this file.
1111
from nested schema sections are now appended instead of being skipped. This
1212
keeps newly added nested config sections split into their own generated files
1313
on regeneration.
14+
15+
### Changed
16+
17+
- Nested config sections are now split only when the field schema has
18+
`x-tree-split = true`, for example
19+
`#[schemars(extend("x-tree-split" = true))]`. Unmarked nested sections remain
20+
in their parent template and parent JSON Schema.

README.de.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Es unterstuetzt:
2929
- Erkennung von Include-Zyklen
3030
- deterministische Traversierungsreihenfolge
3131
- gespiegelte Sammlung von Vorlagenzielen
32-
- automatische YAML-Vorlagenaufteilung fuer verschachtelte Schemaabschnitte
32+
- Opt-in-YAML-Vorlagenaufteilung fuer mit `x-tree-split` markierte Abschnitte
3333

3434
Anwendungen stellen ihr Schema bereit, indem sie `confique::Config` ableiten
3535
und `ConfigSchema` implementieren, um das Include-Feld des Schemas offenzulegen.
@@ -56,9 +56,10 @@ einen kleinen Adapter, der Includes aus der zwischengeschalteten
5656
use std::path::PathBuf;
5757

5858
use confique::Config;
59+
use schemars::JsonSchema;
5960
use rust_config_tree::ConfigSchema;
6061

61-
#[derive(Debug, Config)]
62+
#[derive(Debug, Config, JsonSchema)]
6263
struct AppConfig {
6364
#[config(default = [])]
6465
include: Vec<PathBuf>,
@@ -67,10 +68,11 @@ struct AppConfig {
6768
mode: String,
6869

6970
#[config(nested)]
71+
#[schemars(extend("x-tree-split" = true))]
7072
server: ServerConfig,
7173
}
7274

73-
#[derive(Debug, Config)]
75+
#[derive(Debug, Config, JsonSchema)]
7476
struct ServerConfig {
7577
#[config(default = 8080)]
7678
port: u16,
@@ -212,7 +214,7 @@ gerendert. Das Ausgabeformat wird aus dem Ausgabepfad abgeleitet:
212214
- unbekannte oder fehlende Erweiterungen erzeugen YAML
213215

214216
Verwende `write_config_schemas`, um Draft-7-JSON-Schemas fuer die
215-
Root-Konfiguration und verschachtelte Abschnitte zu erzeugen. Die erzeugten
217+
Root-Konfiguration und explizit aufgeteilte verschachtelte Abschnitte zu erzeugen. Die erzeugten
216218
Schemas lassen `required`-Einschraenkungen weg, damit IDEs Vervollstaendigung
217219
fuer partielle Konfigurationsdateien anbieten koennen, ohne fehlende Felder zu
218220
melden:
@@ -227,13 +229,18 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
227229
}
228230
```
229231

230-
Bei einem Schema mit den Abschnitten `server` und `log` schreibt dies
232+
Mark a nested field with `#[schemars(extend("x-tree-split" = true))]` when it
233+
should be generated as its own `config/*.yaml` template and
234+
`schemas/*.schema.json` schema. Unmarked nested fields stay in the parent
235+
template and parent schema.
236+
237+
Bei einem Schema mit den mit `x-tree-split` markierten Abschnitten `server` und `log` schreibt dies
231238
`schemas/myapp.schema.json`, `schemas/server.schema.json` und
232239
`schemas/log.schema.json`. Das Root-Schema enthaelt nur Felder, die in die
233240
Root-Konfigurationsdatei gehoeren, etwa `include` und skalare Root-Felder. Es
234-
laesst verschachtelte Abschnittseigenschaften bewusst weg, sodass `server` und
241+
laesst aufgeteilte Abschnittseigenschaften bewusst weg, sodass `server` und
235242
`log` nur beim Bearbeiten ihrer eigenen Abschnitts-YAML-Dateien vervollstaendigt
236-
werden.
243+
werden. Nicht markierte verschachtelte Abschnitte bleiben im Root-Schema.
237244

238245
Verwende `write_config_templates`, um eine Root-Vorlage und jede ueber ihren
239246
Include-Baum erreichbare Vorlagendatei zu erzeugen:
@@ -267,7 +274,7 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
267274
```
268275

269276
Root-Ziele fuer TOML/YAML binden das Root-Schema und vervollstaendigen keine
270-
untergeordneten Abschnittsfelder. Aufgeteilte YAML-Abschnittsziele binden ihr
277+
aufgeteilten untergeordneten Abschnittsfelder. Aufgeteilte YAML-Abschnittsziele binden ihr
271278
passendes Abschnittsschema, zum Beispiel erhaelt `config/log.yaml`
272279
`# yaml-language-server: $schema=../schemas/log.schema.json`. JSON- und
273280
JSON5-Ziele erhalten bewusst kein `$schema`-Feld; binde sie ueber
@@ -280,7 +287,7 @@ Die Vorlagenerzeugung waehlt den Quellbaum in dieser Reihenfolge:
280287
- der Ausgabepfad, behandelt als neuer leerer Vorlagenbaum
281288

282289
Wenn ein Quellknoten keine Include-Liste hat, leitet `rust-config-tree`
283-
Kind-Vorlagendateien aus verschachtelten `confique`-Abschnitten ab. Mit dem
290+
Kind-Vorlagendateien aus mit `x-tree-split` markierten verschachtelten `confique`-Abschnitten ab. Mit dem
284291
obigen Schema erzeugt eine leere Quelle `config.example.yaml`:
285292

286293
```text
@@ -291,7 +298,8 @@ config/server.yaml
291298
Die Root-Vorlage erhaelt einen Include-Block fuer `config/server.yaml`.
292299
YAML-Ziele, die einem verschachtelten Abschnitt entsprechen, etwa
293300
`config/server.yaml`, enthalten nur diesen Abschnitt. Weitere verschachtelte
294-
Abschnitte werden ebenso rekursiv aufgeteilt.
301+
Abschnitte werden nur rekursiv aufgeteilt, wenn diese Felder ebenfalls
302+
`x-tree-split` tragen.
295303

296304
Ueberschreibe `template_path_for_section`, wenn ein Abschnitt an einem anderen
297305
Pfad erzeugt werden soll:

README.es.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Gestiona:
2929
- detección de ciclos de include
3030
- orden de recorrido determinista
3131
- recopilación reflejada de destinos de plantilla
32-
- división automática de plantillas YAML para secciones anidadas del esquema
32+
- división opt-in de plantillas YAML para secciones marcadas con `x-tree-split`
3333

3434
Las aplicaciones proporcionan su esquema derivando `confique::Config` e
3535
implementando `ConfigSchema` para exponer el campo de includes del esquema.
@@ -56,9 +56,10 @@ intermedia de `confique`.
5656
use std::path::PathBuf;
5757

5858
use confique::Config;
59+
use schemars::JsonSchema;
5960
use rust_config_tree::ConfigSchema;
6061

61-
#[derive(Debug, Config)]
62+
#[derive(Debug, Config, JsonSchema)]
6263
struct AppConfig {
6364
#[config(default = [])]
6465
include: Vec<PathBuf>,
@@ -67,10 +68,11 @@ struct AppConfig {
6768
mode: String,
6869

6970
#[config(nested)]
71+
#[schemars(extend("x-tree-split" = true))]
7072
server: ServerConfig,
7173
}
7274

73-
#[derive(Debug, Config)]
75+
#[derive(Debug, Config, JsonSchema)]
7476
struct ServerConfig {
7577
#[config(default = 8080)]
7678
port: u16,
@@ -214,7 +216,7 @@ recorrido de includes. El formato de salida se infiere de la ruta de salida:
214216
- extensiones desconocidas o ausentes generan YAML
215217

216218
Usa `write_config_schemas` para crear JSON Schemas Draft 7 para la
217-
configuración raíz y las secciones anidadas. Los esquemas generados omiten
219+
configuración raíz y las secciones marcadas con `x-tree-split`. Los esquemas generados omiten
218220
restricciones `required` para que los IDE puedan ofrecer completado en archivos
219221
de configuración parciales sin informar campos faltantes:
220222

@@ -228,11 +230,16 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
228230
}
229231
```
230232

231-
Para un esquema con secciones `server` y `log`, esto escribe
233+
Mark a nested field with `#[schemars(extend("x-tree-split" = true))]` when it
234+
should be generated as its own `config/*.yaml` template and
235+
`schemas/*.schema.json` schema. Unmarked nested fields stay in the parent
236+
template and parent schema.
237+
238+
Para un esquema con secciones `server` y `log` marcadas con `x-tree-split`, esto escribe
232239
`schemas/myapp.schema.json`, `schemas/server.schema.json` y
233240
`schemas/log.schema.json`. El esquema raíz contiene solo campos que pertenecen
234241
al archivo de configuración raíz, como `include` y campos escalares raíz. Omite
235-
deliberadamente las propiedades de secciones anidadas, de modo que `server` y
242+
deliberadamente las propiedades de secciones divididas, de modo que `server` y
236243
`log` solo se completan al editar sus propios archivos YAML de sección.
237244

238245
Usa `write_config_templates` para crear una plantilla raíz y todos los archivos
@@ -279,7 +286,7 @@ La generación de plantillas elige su árbol fuente en este orden:
279286
- la ruta de salida, tratada como un nuevo árbol de plantillas vacío
280287

281288
Si un nodo fuente no tiene lista de includes, `rust-config-tree` deriva
282-
archivos de plantilla hijos desde las secciones anidadas de `confique`. Con el
289+
archivos de plantilla hijos desde las secciones anidadas de `confique` marcadas con `x-tree-split`. Con el
283290
esquema anterior, una fuente `config.example.yaml` vacía produce:
284291

285292
```text
@@ -289,8 +296,8 @@ config/server.yaml
289296

290297
La plantilla raíz recibe un bloque include para `config/server.yaml`. Los
291298
destinos YAML que se mapean a una sección anidada, como `config/server.yaml`,
292-
contienen solo esa sección. Las secciones anidadas más profundas se dividen
293-
recursivamente de la misma forma.
299+
contienen solo esa sección. Las secciones anidadas mas profundas solo se dividen
300+
recursivamente cuando esos campos tambien llevan `x-tree-split`.
294301

295302
Sobrescribe `template_path_for_section` cuando una sección deba generarse en
296303
una ruta distinta:

README.fi.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Se kasittelee:
2323
- include-syklien tunnistuksen
2424
- deterministisen lapikayntijarjestyksen
2525
- peilatun mallikohteiden keruun
26-
- automaattisen YAML-mallien jakamisen sisakkaisille skeemaosioille
26+
- opt-in YAML-mallien jakamisen `x-tree-split`-merkityille osioille
2727

2828
Sovellukset tarjoavat skeemansa johtamalla `confique::Config`-traitin ja toteuttamalla `ConfigSchema`-traitin, joka paljastaa skeeman include-kentan.
2929

@@ -47,9 +47,10 @@ Sovelluksen skeema omistaa include-kentan. `rust-config-tree` tarvitsee vain pie
4747
use std::path::PathBuf;
4848

4949
use confique::Config;
50+
use schemars::JsonSchema;
5051
use rust_config_tree::ConfigSchema;
5152

52-
#[derive(Debug, Config)]
53+
#[derive(Debug, Config, JsonSchema)]
5354
struct AppConfig {
5455
#[config(default = [])]
5556
include: Vec<PathBuf>,
@@ -58,10 +59,11 @@ struct AppConfig {
5859
mode: String,
5960

6061
#[config(nested)]
62+
#[schemars(extend("x-tree-split" = true))]
6163
server: ServerConfig,
6264
}
6365

64-
#[derive(Debug, Config)]
66+
#[derive(Debug, Config, JsonSchema)]
6567
struct ServerConfig {
6668
#[config(default = 8080)]
6769
port: u16,
@@ -176,7 +178,7 @@ Mallit renderoidaan samalla skeemalla ja include-lapikaynnin saannoilla. Tuloste
176178
- `.json` ja `.json5` tuottavat JSON5-yhteensopivia malleja
177179
- tuntematon tai puuttuva paate tuottaa YAMLia
178180

179-
Kayta `write_config_schemas`-funktiota Draft 7 JSON Schema -skeemojen luontiin juurikonfiguraatiolle ja sisakkaisille osioille. Luodut skeemat jattavat `required`-rajoitteet pois, jotta IDEt voivat tarjota taydennysta osittaisille konfiguraatiotiedostoille ilman puuttuvien kenttien virheilmoituksia:
181+
Kayta `write_config_schemas`-funktiota Draft 7 JSON Schema -skeemojen luontiin juurikonfiguraatiolle ja jaetuille sisakkaisille osioille. Luodut skeemat jattavat `required`-rajoitteet pois, jotta IDEt voivat tarjota taydennysta osittaisille konfiguraatiotiedostoille ilman puuttuvien kenttien virheilmoituksia:
180182

181183
```rust
182184
use rust_config_tree::write_config_schemas;
@@ -188,7 +190,12 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
188190
}
189191
```
190192

191-
Skeemalle, jossa on `server`- ja `log`-osiot, tama kirjoittaa tiedostot `schemas/myapp.schema.json`, `schemas/server.schema.json` ja `schemas/log.schema.json`. Juuriskeema sisaltaa vain juurikonfiguraatiotiedostoon kuuluvat kentat, kuten `include` ja juuritason skalaarikentat. Se jattaa sisakkaisten osioiden ominaisuudet tarkoituksella pois, joten `server` ja `log` taydentyvat vain niiden omia osio-YAML-tiedostoja muokattaessa.
193+
Mark a nested field with `#[schemars(extend("x-tree-split" = true))]` when it
194+
should be generated as its own `config/*.yaml` template and
195+
`schemas/*.schema.json` schema. Unmarked nested fields stay in the parent
196+
template and parent schema.
197+
198+
Skeemalle, jossa `server`- ja `log`-osiot on merkitty `x-tree-split`illa, tama kirjoittaa tiedostot `schemas/myapp.schema.json`, `schemas/server.schema.json` ja `schemas/log.schema.json`. Juuriskeema sisaltaa vain juurikonfiguraatiotiedostoon kuuluvat kentat, kuten `include` ja juuritason skalaarikentat. Se jattaa jaettujen osioiden ominaisuudet tarkoituksella pois, joten `server` ja `log` taydentyvat vain niiden omia osio-YAML-tiedostoja muokattaessa.
192199

193200
Kayta `write_config_templates`-funktiota juurimallin ja kaikkien sen include-puusta loytyvien mallitiedostojen luontiin:
194201

@@ -218,22 +225,22 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
218225
}
219226
```
220227

221-
Juuri-TOML/YAML-kohteet sitovat juuriskeeman eivatka taydenna lapsiosioiden kenttia. Jaetut osio-YAML-kohteet sitovat vastaavan osioskeeman; esimerkiksi `config/log.yaml` saa rivin `# yaml-language-server: $schema=../schemas/log.schema.json`. JSON- ja JSON5-kohteisiin ei tarkoituksella lisata `$schema`-kenttaa; sido ne editoriasetuksilla, kuten VS Coden `json.schemas`.
228+
Juuri-TOML/YAML-kohteet sitovat juuriskeeman eivatka taydenna jaettujen lapsiosioiden kenttia. Jaetut osio-YAML-kohteet sitovat vastaavan osioskeeman; esimerkiksi `config/log.yaml` saa rivin `# yaml-language-server: $schema=../schemas/log.schema.json`. JSON- ja JSON5-kohteisiin ei tarkoituksella lisata `$schema`-kenttaa; sido ne editoriasetuksilla, kuten VS Coden `json.schemas`.
222229

223230
Mallien luonti valitsee lahdepuun tassa jarjestyksessa:
224231

225232
- olemassa oleva konfiguraatiopolku
226233
- olemassa oleva tulostemallipolku
227234
- tulostepolku, jota kasitellaan uutena tyhjana mallipuuna
228235

229-
Jos lahdesolmulla ei ole include-listaa, `rust-config-tree` johtaa lapsimallitiedostot sisakkaisista `confique`-osioista. Ylla olevalla skeemalla tyhja `config.example.yaml`-lahde tuottaa:
236+
Jos lahdesolmulla ei ole include-listaa, `rust-config-tree` johtaa lapsimallitiedostot `x-tree-split`-merkityista sisakkaisista `confique`-osioista. Ylla olevalla skeemalla tyhja `config.example.yaml`-lahde tuottaa:
230237

231238
```text
232239
config.example.yaml
233240
config/server.yaml
234241
```
235242

236-
Juurimalli saa include-lohkon tiedostolle `config/server.yaml`. YAML-kohteet, jotka vastaavat sisakkaista osiota, kuten `config/server.yaml`, sisaltavat vain kyseisen osion. Syvemmat sisakkaiset osiot jaetaan rekursiivisesti samalla tavalla.
243+
Juurimalli saa include-lohkon tiedostolle `config/server.yaml`. YAML-kohteet, jotka vastaavat sisakkaista osiota, kuten `config/server.yaml`, sisaltavat vain kyseisen osion. Syvemmat sisakkaiset osiot jaetaan rekursiivisesti vain, kun myos niilla kentilla on `x-tree-split`.
237244

238245
Ohita `template_path_for_section`, kun osio tulee luoda eri polkuun:
239246

README.fr.md

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ Il gere :
3131
- la detection des cycles d'inclusion ;
3232
- un ordre de traversee deterministe ;
3333
- la collecte miroir des cibles de modeles ;
34-
- le decoupage automatique des modeles YAML pour les sections de schema
35-
imbriquees.
34+
- decoupage opt-in des modeles YAML pour les sections imbriquees
35+
marquees `x-tree-split`.
3636

3737
Les applications fournissent leur schema en derivant `confique::Config` et en
3838
implementant `ConfigSchema` pour exposer le champ d'inclusion du schema.
@@ -59,9 +59,10 @@ intermediaire `confique`.
5959
use std::path::PathBuf;
6060

6161
use confique::Config;
62+
use schemars::JsonSchema;
6263
use rust_config_tree::ConfigSchema;
6364

64-
#[derive(Debug, Config)]
65+
#[derive(Debug, Config, JsonSchema)]
6566
struct AppConfig {
6667
#[config(default = [])]
6768
include: Vec<PathBuf>,
@@ -70,10 +71,11 @@ struct AppConfig {
7071
mode: String,
7172

7273
#[config(nested)]
74+
#[schemars(extend("x-tree-split" = true))]
7375
server: ServerConfig,
7476
}
7577

76-
#[derive(Debug, Config)]
78+
#[derive(Debug, Config, JsonSchema)]
7779
struct ServerConfig {
7880
#[config(default = 8080)]
7981
port: u16,
@@ -217,7 +219,7 @@ d'inclusions. Le format de sortie est deduit du chemin de sortie :
217219
- les extensions inconnues ou absentes generent du YAML.
218220

219221
Utilisez `write_config_schemas` pour creer des schemas JSON Draft 7 pour la
220-
configuration racine et les sections imbriquees. Les schemas generes omettent
222+
configuration racine et les sections imbriquees decoupees. Les schemas generes omettent
221223
les contraintes `required` afin que les IDE puissent proposer la completion pour
222224
des fichiers de configuration partiels sans signaler de champs manquants :
223225

@@ -231,13 +233,18 @@ fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
231233
}
232234
```
233235

234-
Pour un schema avec les sections `server` et `log`, cela ecrit
236+
Mark a nested field with `#[schemars(extend("x-tree-split" = true))]` when it
237+
should be generated as its own `config/*.yaml` template and
238+
`schemas/*.schema.json` schema. Unmarked nested fields stay in the parent
239+
template and parent schema.
240+
241+
Pour un schema avec les sections `server` et `log` marquees `x-tree-split`, cela ecrit
235242
`schemas/myapp.schema.json`, `schemas/server.schema.json` et
236243
`schemas/log.schema.json`. Le schema racine ne contient que les champs qui
237244
appartiennent au fichier racine, comme `include` et les champs scalaires racine.
238-
Il omet intentionnellement les proprietes des sections imbriquees, donc `server`
245+
Il omet intentionnellement les proprietes des sections decoupees, donc `server`
239246
et `log` ne sont completes que lors de l'edition de leurs propres fichiers YAML
240-
de section.
247+
de section. Les sections imbriquees non marquees restent dans le schema racine.
241248

242249
Utilisez `write_config_templates` pour creer un modele racine et chaque fichier
243250
modele accessible depuis son arbre d'inclusion :
@@ -283,7 +290,7 @@ La generation de modeles choisit son arbre source dans cet ordre :
283290
- le chemin de sortie, traite comme un nouvel arbre de modeles vide.
284291

285292
Si un noeud source n'a pas de liste d'inclusions, `rust-config-tree` derive les
286-
fichiers modeles enfants depuis les sections `confique` imbriquees. Avec le
293+
fichiers modeles enfants depuis les sections `confique` imbriquees marquees `x-tree-split`. Avec le
287294
schema ci-dessus, une source `config.example.yaml` vide produit :
288295

289296
```text
@@ -294,7 +301,7 @@ config/server.yaml
294301
Le modele racine recoit un bloc d'inclusion pour `config/server.yaml`. Les
295302
cibles YAML qui correspondent a une section imbriquee, comme
296303
`config/server.yaml`, ne contiennent que cette section. Les sections encore plus
297-
imbriquees sont separees recursivement de la meme facon.
304+
imbriquees ne sont separees recursivement que lorsque ces champs portent aussi `x-tree-split`.
298305

299306
Remplacez `template_path_for_section` lorsqu'une section doit etre generee a un
300307
autre chemin :
@@ -415,7 +422,7 @@ d'execution. Cela ecrit aussi le schema racine et les schemas de section au
415422
chemin de schema choisi.
416423

417424
`config-schema --output <path>` ecrit le schema JSON Draft 7 racine et les
418-
schemas de section. Si aucun chemin de sortie n'est fourni, le schema racine est
425+
schemas de section. Les sections imbriquees non marquees restent dans le schema racine. Si aucun chemin de sortie n'est fourni, le schema racine est
419426
ecrit dans `schemas/config.schema.json`.
420427

421428
`config-validate` charge l'arbre complet de configuration d'execution et lance

0 commit comments

Comments
 (0)