Commandes personnalisées pour test-x-fern-global-parameters-extension
Aperçu
Le CLI test-x-fern-global-parameters-extension prend en charge les commandes personnalisées écrites par l'utilisateur qui sont compilées dans le binaire aux côtés des commandes API auto-générées.
Les commandes personnalisées reçoivent un client SDK entièrement configuré qui hérite du système d'authentification, des tentatives, du TLS, de l'URL de base et des en-têtes globaux du CLI — aucune configuration requise.
Architecture
cli/test-x-fern-global-parameters-extension/custom.rs ← Vos gestionnaires de commandes (protégé par .fernignore)
cli/test-x-fern-global-parameters-extension/sdk.rs ← Pont généré : client() + block_on()
cli/test-x-fern-global-parameters-extension/main.rs ← Point d'entrée généré (appelle custom::register)
test-x-fern-global-parameters-extension-sdk/ ← Crate SDK typé co-généré
test-x-fern-global-parameters-extension-types/ ← Crate de modèles typés co-généré
Ajouter une commande personnalisée
1. Modifier cli/test-x-fern-global-parameters-extension/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le récrira jamais.
Enregistrez les commandes dans la fonction register() :
use test_x_fern_global_parameters_extension_sdk::api::*;
pub fn register(app: CliApp) -> CliApp {
let app = app.command(
clap::Command::new("get")
.about("Run products get")
.arg(clap::Arg::new("regionId").required(true))
.arg(clap::Arg::new("productId").required(true))
,
|matches, ctx| {
let region_id = matches.get_one::<String>("regionId").unwrap();
let product_id = matches.get_one::<String>("productId").unwrap();
let client = super::sdk::client(ctx);
let result = super::sdk::block_on(
client.products.get(region_id, product_id),
)?;
println!("{}", serde_json::to_string_pretty(&result).unwrap());
Ok(())
},
);
app
}
Puis compilez et testez :
cargo build
test-x-fern-global-parameters-extension get <regionId> <productId>
2. Clients SDK disponibles
L'appel super::sdk::client(ctx) retourne un test_x_fern_global_parameters_extension_sdk::api::Client
avec les sous-clients suivants :
| Champ | Type | Description |
|---|---|---|
client.products |
test_x_fern_global_parameters_extension_sdk::api::ProductsClient |
opérations products |
3. Motifs clés
Obtenir le client SDK (partage d'exécution, authentification complète) :
let client = super::sdk::client(ctx);
Exécuter un appel SDK async depuis un gestionnaire sync :
let result = super::sdk::block_on(
client.some_resource.some_method(args),
)?;
Utiliser les modèles typés pour la sérialisation requête/réponse :
use test_x_fern_global_parameters_extension_sdk::api::*;
Sécurité de la régénération
| Fichier | Régénéré ? | Notes |
|---|---|---|
cli/test-x-fern-global-parameters-extension/custom.rs |
Non | Protégé par .fernignore |
cli/test-x-fern-global-parameters-extension/sdk.rs |
Oui | Fait le pont AppContext → client SDK |
cli/test-x-fern-global-parameters-extension/main.rs |
Oui | Appelle custom::register(app) |
test-x-fern-global-parameters-extension-sdk/ |
Oui | Crate SDK typé co-généré |
test-x-fern-global-parameters-extension-types/ |
Oui | Modèles typés co-générés |
Après l'exécution de fern generate, votre custom.rs est préservé. Tout
le code généré (SDK, types, glue, main.rs) est mis à jour pour correspondre à
la spécification d'API la plus récente. Si la surface du SDK change (méthodes renommées, nouveaux
sous-clients), mettez à jour votre custom.rs en conséquence.
Compilation et test
# Compiler le CLI (inclut les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
test-x-fern-global-parameters-extension <your-command> [args]
# Exécuter avec sortie détaillée pour le débogage
RUST_LOG=debug test-x-fern-global-parameters-extension <your-command> [args]