Commandes personnalisées pour nullable-request-body
Vue d'ensemble
Le CLI nullable-request-body supporte 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 obtiennent un client SDK complètement 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/nullable-request-body/custom.rs ← Vos gestionnaires de commandes (protégés par .fernignore)
cli/nullable-request-body/sdk.rs ← Pont généré : client() + block_on()
cli/nullable-request-body/main.rs ← Point d'entrée généré (appelle custom::register)
nullable-request-body-sdk/ ← Crate SDK typé co-généré
nullable-request-body-types/ ← Crate de modèles typés co-généré
Ajouter une commande personnalisée
1. Éditer cli/nullable-request-body/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le réécrira jamais. Enregistrez les commandes dans la fonction register() :
use nullable_request_body_sdk::api::*;
pub fn register(app: CliApp) -> CliApp {
let app = app.command(
clap::Command::new("test-method-name")
.about("Post Nullable Request Body")
.arg(clap::Arg::new("path_param").required(true))
,
|matches, ctx| {
let path_param = matches.get_one::<String>("path_param").unwrap();
let client = super::sdk::client(ctx);
let result = super::sdk::block_on(
client.test_group.test_method_name(path_param),
)?;
println!("{}", serde_json::to_string_pretty(&result).unwrap());
Ok(())
},
);
app
}
Ensuite, compilez et testez :
cargo build
nullable-request-body test-method-name <path_param>
2. Clients SDK disponibles
L'appel super::sdk::client(ctx) retourne un nullable_request_body_sdk::api::Client avec les sous-clients suivants :
| Champ | Type | Description |
|---|---|---|
client.test_group |
nullable_request_body_sdk::api::TestGroupClient |
opérations test_group |
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 depuis un gestionnaire synchrone :
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 nullable_request_body_sdk::api::*;
Sécurité de régénération
| Fichier | Régénéré ? | Notes |
|---|---|---|
cli/nullable-request-body/custom.rs |
Non | Protégé par .fernignore |
cli/nullable-request-body/sdk.rs |
Oui | Fait le pont AppContext → client SDK |
cli/nullable-request-body/main.rs |
Oui | Appelle custom::register(app) |
nullable-request-body-sdk/ |
Oui | Crate SDK typé co-généré |
nullable-request-body-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 spécification 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 le CLI (inclut les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
nullable-request-body <your-command> [args]
# Exécuter avec sortie détaillée pour le débogage
RUST_LOG=debug nullable-request-body <your-command> [args]