Commandes personnalisées pour server-sent-events-openapi
Présentation générale
Le CLI server-sent-events-openapi 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 reçoivent un client SDK complètement câblé qui hérite de l'authentification,
des tentatives, de la TLS, de l'URL de base et des en-têtes globaux du CLI — zéro configuration requise.
Architecture
cli/server-sent-events-openapi/custom.rs ← Vos gestionnaires de commande (protégés par .fernignore)
cli/server-sent-events-openapi/sdk.rs ← Pont généré : client() + block_on()
cli/server-sent-events-openapi/main.rs ← Point d'entrée généré (appelle custom::register)
server-sent-events-openapi-sdk/ ← Crate SDK typé co-généré
server-sent-events-openapi-types/ ← Crate de modèles typés co-généré
Ajouter une commande personnalisée
1. Éditer cli/server-sent-events-openapi/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le
récrira jamais. Enregistrez les commandes dans la fonction register() :
use server_sent_events_openapi_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 server_sent_events_openapi_sdk::api::Client
avec les sous-clients suivants :
(Les sous-clients sont dérivés de la spécification API au moment de la génération.)
3. Motifs clés
Obtenir le client SDK (partage d'exécution, complètement authentifié) :
let client = super::sdk::client(ctx);
Exécuter un appel SDK asynchrone à partir d'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 server_sent_events_openapi_sdk::api::*;
Sécurité de la régénération
| Fichier | Régénéré ? | Notes |
|---|---|---|
cli/server-sent-events-openapi/custom.rs |
Non | Protégé par .fernignore |
cli/server-sent-events-openapi/sdk.rs |
Oui | Pont AppContext → client SDK |
cli/server-sent-events-openapi/main.rs |
Oui | Appelle custom::register(app) |
server-sent-events-openapi-sdk/ |
Oui | Crate SDK typé co-généré |
server-sent-events-openapi-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, colle, 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.
Construire et tester
# Construire le CLI (inclut les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
server-sent-events-openapi <your-command> [args]
# Exécuter avec sortie détaillée pour le débogage
RUST_LOG=debug server-sent-events-openapi <your-command> [args]