CLI-integrering
English | 中文 | 日本語 | 한국어 | Français | Deutsch | Español | Português | Svenska | Suomi | Nederlands
ConfigCommand tillhandahaller ateranvandbara clap-underkommandon:
config-templateconfig-schemaconfig-validatecompletionsinstall-completionsuninstall-completions
Dessa inbyggda underkommandon ar separata fran programspecifika override-flaggor for konfiguration. Slå samman override-flaggor som Figment-providers i runtime-laddningsvagen.
Override-flaggor for konfiguration forblir en del av det konsumerande
programmets CLI. Deras namn behover inte matcha punktade
konfigurationssokvagar. Till exempel kan programmet parsa --server-port och
mappa det till den nastlade konfigurationsnyckeln server.port. Endast flaggor
som programmet mappar till CliOverrides paverkar konfigurationsvarden.
Platta ut det i ett programs kommandoenum:
- Behall programmets egen
Parser-typ. - Behall programmets egen
Subcommand-enum. - Lagg till
#[command(flatten)] Config(ConfigCommand)i den enumen. - Clap expanderar de utplattade
ConfigCommand-varianterna till samma kommandoniva som programmets egna varianter. - Matcha varianten
Config(command)och skicka den tillhandle_config_command.
use std::path::PathBuf;
use clap::{Parser, Subcommand};
use confique::Config;
use schemars::JsonSchema;
use rust_config_tree::{ConfigCommand, ConfigSchema, handle_config_command, load_config};
#[derive(Debug, Config, JsonSchema)]
struct AppConfig {
#[config(default = [])]
include: Vec<PathBuf>,
}
impl ConfigSchema for AppConfig {
fn include_paths(layer: &<Self as Config>::Layer) -> Vec<PathBuf> {
layer.include.clone().unwrap_or_default()
}
}
#[derive(Debug, Parser)]
#[command(name = "demo")]
struct Cli {
#[arg(long, default_value = "config.yaml")]
config: PathBuf,
#[command(subcommand)]
command: Command,
}
#[derive(Debug, Subcommand)]
enum Command {
Run,
#[command(flatten)]
Config(ConfigCommand),
}
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let cli = Cli::parse();
match cli.command {
Command::Run => {
let config = load_config::<AppConfig>(&cli.config)?;
println!("{config:#?}");
}
Command::Config(command) => {
handle_config_command::<Cli, AppConfig>(command, &cli.config)?;
}
}
Ok(())
}
Konfigurationsmallar
demo config-template
Kommandot skriver mallar under config/<root_config_name>/. Om --output far
en sokvag anvands bara filnamnet. Om inget utdatafilnamn anges skriver
kommandot config/<root_config_name>/<root_config_name>.example.yaml. Lagg till
--schema schemas/myapp.schema.json for att binda genererade TOML-, YAML-,
JSON- och JSON5-mallar till genererade JSON Schemas. Delade YAML-mallar binder
matchande sektionsschema. JSON- och JSON5-mallar far ett $schema-falt som
VS Code kanner igen. Kommandot skriver ocksa rot- och sektionsscheman till den
valda schemasokvagen.
demo config-template --output app_config.example.toml --schema schemas/myapp.schema.json
Generera rot- och sektions-JSON Schemas:
demo config-schema
Utan --output skriver config-schema rotschemat till
config/<root_config_name>/<root_config_name>.schema.json.
Validera hela runtime-konfigurationstradet:
demo config-validate
Genererade editorscheman undviker avsiktligt required-field-diagnostik for
delade filer. config-validate laddar includes, tillampar standardvarden och
kor slutlig confique-validering, inklusive validatorer deklarerade med
#[config(validate = Self::validate)]. Genererade *.schema.json-filer ar for
IDE-komplettering och grundlaggande editor-kontroller, inte for
faltvardelegalitet. Det skriver Configuration is ok nar valideringen lyckas.
Skalkompletteringar
Skriv kompletteringar till stdout:
demo completions zsh
Installera kompletteringar:
demo install-completions zsh
Avinstallera kompletteringar:
demo uninstall-completions zsh
Installeraren stoder Bash, Elvish, Fish, PowerShell och Zsh. Den skriver kompletteringsfilen under anvandarens hemkatalog och uppdaterar skalets startfil for skal som kraver det.
Innan en befintlig skalstartfil som ~/.zshrc, ~/.bashrc, en Elvish
rc-fil eller en PowerShell-profil andras skriver kommandot en backup bredvid
originalfilen:
<rc-file>.backup.by.<program-name>.<timestamp>