zerodds-config
Layered configuration for ZeroDDS: a typed base file, sorted drop-in directories, nested includes with cycle detection, and the origin of every value.
- Source: crates/config
- API docs: docs.rs/zerodds-config
Layered configuration trees with a base file, filename-sorted YAML drop-ins, includes and per-value source locations. This crate loads and merges data. It does not by itself define the DDS runtime's defaults or activation policy.
Maps merge recursively. Scalars and lists replace earlier values, while +name appends to the list at name. Config::origin_of identifies the surviving value's source. The parser accepts a deliberately limited YAML subset, not arbitrary YAML. Include cycles and excessive nesting are errors.
include: accepts a file or directory path, or a block sequence of paths. Included directories use the selected extension filter and filename order. Their fragments may explicitly include further directories. Includes are loaded before the including file's own keys, regardless of the directive's textual position. Paths are relative to the including file and must exist. Missing optional top-level drop-in directories remain valid. A refused Config::push leaves the effective tree and source list unchanged.
Use Loader to select sources, then inspect the resulting Config. The library documentation defines the syntax, precedence and supported include forms.
Layers
Around the files sit two more layers: an environment layer beneath them (env_config, from a consumer's table of variable names and paths) and the --set PATH=VALUE flags above them (CommandLine). CommandLine::extract takes --config, --set and --check-config out of a program's arguments; loader_for selects the --config base or the platform's SystemLayout; Loader::load_onto puts the files over the environment; unknown_keys lists paths no consumer reads. The precedence is defaults < environment < files < flags.
Environment interpolation (${VAR}) inside a file is separate from the environment layer: it substitutes text while the file is read.
Position
- No dependency on another ZeroDDS crate.
- Used by the daemons
zerodds-opcua-bridgeandzerodds-webdds-bridge.
zerodds-config
Geschichtete Konfiguration für ZeroDDS: eine typisierte Basisdatei, sortierte Drop-in-Verzeichnisse, verschachtelte Includes mit Zykluserkennung und die Herkunft jedes Werts.
- Quelle: crates/config
- API-Docs: docs.rs/zerodds-config
Geschichtete Konfigurationsbäume mit einer Basisdatei, nach Dateinamen sortierten YAML-Drop-ins, Includes und der Quellstelle jedes Werts. Diese Crate lädt und vereinigt Daten. Die Standardwerte der DDS-Laufzeit und ihre Aktivierungsregeln legt sie nicht selbst fest.
Maps werden rekursiv vereinigt. Skalare und Listen ersetzen frühere Werte; +name hängt an die Liste unter name an. Config::origin_of nennt die Quelle des Werts, der sich durchgesetzt hat. Der Parser akzeptiert eine absichtlich begrenzte Teilmenge von YAML, nicht beliebiges YAML. Zyklische Includes und zu tiefe Verschachtelung sind Fehler.
include: nimmt einen Datei- oder Verzeichnispfad oder eine Blocksequenz von Pfaden. Eingebundene Verzeichnisse nutzen den gewählten Filter für Dateiendungen und die Reihenfolge der Dateinamen. Ihre Fragmente dürfen ausdrücklich weitere Verzeichnisse einbinden. Includes werden vor den eigenen Schlüsseln der einbindenden Datei geladen, unabhängig davon, wo die Anweisung im Text steht. Pfade sind relativ zur einbindenden Datei und müssen existieren. Fehlende optionale Drop-in-Verzeichnisse der obersten Ebene bleiben gültig. Ein abgelehntes Config::push lässt den wirksamen Baum und die Quellenliste unverändert.
Mit Loader werden die Quellen gewählt, danach wird die entstandene Config ausgewertet. Die Bibliotheksdokumentation legt Syntax, Vorrang und die unterstützten Formen von Includes fest.
Schichten
Um die Dateien liegen zwei weitere Schichten: darunter eine Umgebungsschicht (env_config, aus einer Tabelle von Variablennamen und Pfaden des Nutzers) und darüber die Flags --set PATH=VALUE (CommandLine). CommandLine::extract nimmt --config, --set und --check-config aus den Argumenten eines Programms; loader_for wählt die Basis aus --config oder das SystemLayout der Plattform; Loader::load_onto legt die Dateien über die Umgebung; unknown_keys listet Pfade, die kein Nutzer liest. Der Vorrang ist Standardwerte < Umgebung < Dateien < Flags.
Die Ersetzung von Umgebungsvariablen (${VAR}) innerhalb einer Datei ist von der Umgebungsschicht getrennt: Sie ersetzt Text, während die Datei gelesen wird.
Stellung
- Keine Abhängigkeit von einer anderen ZeroDDS-Crate.
- Genutzt von den Daemons
zerodds-opcua-bridgeundzerodds-webdds-bridge.