Commandes personnalisées pour oauth-client-credentials-openapi
Aperçu
La CLI oauth-client-credentials-openapi 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 générées automatiquement.
Les commandes personnalisées reçoivent un client SDK entièrement configuré qui hérite de l'authentification, des retries, du TLS, de l'URL de base et des en-têtes globaux de la CLI — zéro configuration requise.
Architecture
cli/oauth-client-credentials-openapi/custom.rs ← Vos gestionnaires de commandes (protégés par .fernignore)
cli/oauth-client-credentials-openapi/sdk.rs ← Pont généré : client() + block_on()
cli/oauth-client-credentials-openapi/main.rs ← Point d'entrée généré (appelle custom::register)
oauth-client-credentials-openapi-sdk/ ← Crate SDK typé co-généré
oauth-client-credentials-openapi-types/ ← Crate modèles typés co-générée
Ajouter une commande personnalisée
1. Modifiez cli/oauth-client-credentials-openapi/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le surécrit jamais. Enregistrez les commandes dans la fonction register() :
use oauth_client_credentials_openapi_sdk::api::*;
pub fn register(app: CliApp) -> CliApp {
let app = app.command(
clap::Command::new("get")
.about("Get a plant by ID")
.arg(clap::Arg::new("plantId").required(true))
,
|matches, ctx| {
let plant_id = matches.get_one::<String>("plantId").unwrap();
let client = super::sdk::client(ctx);
let result = super::sdk::block_on(
client.plants.get(plant_id),
)?;
println!("{}", serde_json::to_string_pretty(&result).unwrap());
Ok(())
},
);
app
}
Puis compilez et testez :
cargo build
oauth-client-credentials-openapi get <plantId>
2. Clients SDK disponibles
L'appel super::sdk::client(ctx) retourne un oauth_client_credentials_openapi_sdk::api::Client
avec les sous-clients suivants :
| Champ | Type | Description |
|---|---|---|
client.identity |
oauth_client_credentials_openapi_sdk::api::IdentityClient |
opérations d'identité |
client.plants |
oauth_client_credentials_openapi_sdk::api::PlantsClient |
opérations sur les plantes |
3. Patterns clés
Obtenir le client SDK (partage d'exécution, entièrement authentifié) :
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 des modèles typés pour la sérialisation requête/réponse :
use oauth_client_credentials_openapi_sdk::api::*;
Sécurité de la régénération
| Fichier | Régénéré ? | Notes |
|---|---|---|
cli/oauth-client-credentials-openapi/custom.rs |
Non | Protégé par .fernignore |
cli/oauth-client-credentials-openapi/sdk.rs |
Oui | Pont AppContext → client SDK |
cli/oauth-client-credentials-openapi/main.rs |
Oui | Appelle custom::register(app) |
oauth-client-credentials-openapi-sdk/ |
Oui | Crate SDK typé co-généré |
oauth-client-credentials-openapi-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 dernière spécification API. Si la surface du SDK change (méthodes renommées, nouveaux sous-clients), mettez à jour votre custom.rs en conséquence.
Compiler et tester
# Compiler la CLI (inclut les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
oauth-client-credentials-openapi <your-command> [args]
# Exécuter avec sortie détaillée pour le débogage
RUST_LOG=debug oauth-client-credentials-openapi <your-command> [args]