Commandes personnalisées pour openapi-request-body-ref
Aperçu
La CLI openapi-request-body-ref supporte les commandes personnalisées rédigées par l'utilisateur qui sont
compilées dans le binaire aux côtés des commandes API générées automatiquement.
Les commandes personnalisées reçoivent un client SDK entièrement câblé qui hérite de l'authentification,
des tentatives, de TLS, de l'URL de base et des en-têtes globaux de la CLI — zéro configuration requise.
Architecture
cli/openapi-request-body-ref/custom.rs ← Vos gestionnaires de commandes (protégés par .fernignore)
cli/openapi-request-body-ref/sdk.rs ← Pont généré : client() + block_on()
cli/openapi-request-body-ref/main.rs ← Point d'entrée généré (appelle custom::register)
openapi-request-body-ref-sdk/ ← Crate SDK typé co-généré
openapi-request-body-ref-types/ ← Crate modèle typé co-généré
Ajouter une commande personnalisée
1. Éditer cli/openapi-request-body-ref/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le
écrasera jamais. Enregistrez les commandes dans la fonction register() :
use openapi_request_body_ref_sdk::api::*;
pub fn register(app: CliApp) -> CliApp {
let app = app.command(
clap::Command::new("get-catalog-image")
.about("Retrieve a catalog image")
.arg(clap::Arg::new("image_id").required(true))
,
|matches, ctx| {
let image_id = matches.get_one::<String>("image_id").unwrap();
let client = super::sdk::client(ctx);
let result = super::sdk::block_on(
client.catalog.get_catalog_image(image_id),
)?;
println!("{}", serde_json::to_string_pretty(&result).unwrap());
Ok(())
},
);
app
}
Ensuite, compilez et testez :
cargo build
openapi-request-body-ref get-catalog-image <image_id>
2. Clients SDK disponibles
L'appel super::sdk::client(ctx) retourne un openapi_request_body_ref_sdk::api::Client
avec les sous-clients suivants :
| Champ | Type | Description |
|---|---|---|
client.vendor |
openapi_request_body_ref_sdk::api::VendorClient |
opérations vendor |
client.catalog |
openapi_request_body_ref_sdk::api::CatalogClient |
opérations catalog |
client.team_member |
openapi_request_body_ref_sdk::api::TeamMemberClient |
opérations team_member |
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 openapi_request_body_ref_sdk::api::*;
Sécurité de la régénération
| Fichier | Régénéré ? | Remarques |
|---|---|---|
cli/openapi-request-body-ref/custom.rs |
Non | Protégé par .fernignore |
cli/openapi-request-body-ref/sdk.rs |
Oui | Pont AppContext → client SDK |
cli/openapi-request-body-ref/main.rs |
Oui | Appelle custom::register(app) |
openapi-request-body-ref-sdk/ |
Oui | Crate SDK typé co-généré |
openapi-request-body-ref-types/ |
Oui | Modèles typés co-générés |
Après avoir exécuté fern generate, votre custom.rs est conservé. Tout
le code généré (SDK, types, glue, main.rs) est mis à jour pour correspondre à
la dernière spécification d'API. 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 la CLI (incluant les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
openapi-request-body-ref <your-command> [args]
# Exécuter avec sortie verbale pour le débogage
RUST_LOG=debug openapi-request-body-ref <your-command> [args]