Commandes personnalisées pour nullable-allof-extends-test
Vue d'ensemble
Le CLI nullable-allof-extends-test supporte les commandes personnalisées écrites par l'utilisateur,
compilées dans le binaire aux côtés des commandes API générées automatiquement.
Les commandes personnalisées obtiennent un client SDK entièrement câblé qui hérite
de l'authentification, des tentatives, du TLS, de l'URL de base et des en-têtes globaux du CLI — aucune configuration requise.
Architecture
cli/nullable-allof-extends-test/custom.rs ← Vos gestionnaires de commandes (protégés par .fernignore)
cli/nullable-allof-extends-test/sdk.rs ← Pont généré : client() + block_on()
cli/nullable-allof-extends-test/main.rs ← Point d'entrée généré (appelle custom::register)
nullable-allof-extends-test-sdk/ ← Crate SDK typé co-généré
nullable-allof-extends-test-types/ ← Crate de modèles typés co-généré
Ajouter une commande personnalisée
1. Éditer cli/nullable-allof-extends-test/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le
surpassera jamais. Enregistrez les commandes dans la fonction register() :
use nullable_allof_extends_test_sdk::api::*;
pub fn register(app: CliApp) -> CliApp {
let app = app.command(
clap::Command::new("my-command")
.about("Description of your command")
.arg(clap::Arg::new("id").required(true)),
|matches, ctx| {
let id = matches.get_one::<String>("id").unwrap();
let client = super::sdk::client(ctx);
let result = super::sdk::block_on(
client.resource.get(id),
)?;
println!("{}", serde_json::to_string_pretty(&result).unwrap());
Ok(())
},
);
app
}
2. Clients SDK disponibles
L'appel super::sdk::client(ctx) retourne un nullable_allof_extends_test_sdk::api::Client
avec les sous-clients suivants :
(Les sous-clients sont dérivés de la spec API au moment de la génération.)
3. Modèles clés
Obtenir le client SDK (partage d'exécution, entièrement authentifié) :
let client = super::sdk::client(ctx);
Exécuter un appel SDK asynchrone depuis un gestionnaire synchrone :
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 nullable_allof_extends_test_sdk::api::*;
Sécurité de la régénération
| Fichier | Régénéré ? | Notes |
|---|---|---|
cli/nullable-allof-extends-test/custom.rs |
Non | Protégé par .fernignore |
cli/nullable-allof-extends-test/sdk.rs |
Oui | Pont AppContext → client SDK |
cli/nullable-allof-extends-test/main.rs |
Oui | Appelle custom::register(app) |
nullable-allof-extends-test-sdk/ |
Oui | Crate SDK typé co-généré |
nullable-allof-extends-test-types/ |
Oui | Modèles typés co-générés |
Après avoir exécuté 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 dernière spec API. Si la surface du SDK change (méthodes renommées, nouveaux
sous-clients), mettez à jour votre custom.rs en conséquence.
Build & Test
# Builder le CLI (inclut les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
nullable-allof-extends-test <your-command> [args]
# Exécuter avec sortie détaillée pour déboguer
RUST_LOG=debug nullable-allof-extends-test <your-command> [args]