Commandes personnalisées pour x-fern-default-test
Aperçu
La CLI x-fern-default-test supporte des 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 retries, du TLS, de l'URL de base et des en-têtes globaux de la CLI — aucune configuration requise.
Architecture
cli/x-fern-default-test/custom.rs ← Vos gestionnaires de commandes (protégés par .fernignore)
cli/x-fern-default-test/sdk.rs ← Pont généré : client() + block_on()
cli/x-fern-default-test/main.rs ← Point d'entrée généré (appelle custom::register)
x-fern-default-test-sdk/ ← Crate SDK typé co-généré
x-fern-default-test-types/ ← Crate de modèles typés co-généré
Ajouter une commande personnalisée
1. Modifier cli/x-fern-default-test/custom.rs
Ce fichier est protégé par .fernignore — fern generate ne le réécrit jamais. Enregistrez les commandes dans la fonction register() :
use x_fern_default_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 x_fern_default_test_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, 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 des modèles typés pour la sérialisation requête/réponse :
use x_fern_default_test_sdk::api::*;
Sécurité de la régénération
| Fichier | Régénéré ? | Notes |
|---|---|---|
cli/x-fern-default-test/custom.rs |
Non | Protégé par .fernignore |
cli/x-fern-default-test/sdk.rs |
Oui | Fait le pont AppContext → client SDK |
cli/x-fern-default-test/main.rs |
Oui | Appelle custom::register(app) |
x-fern-default-test-sdk/ |
Oui | Crate SDK typé co-généré |
x-fern-default-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 spécification API. Si la surface du SDK change (méthodes renommées, nouveaux sous-clients), mettez à jour votre custom.rs en conséquence.
Construction et test
# Construire la CLI (inclut les commandes personnalisées)
cargo build
# Exécuter votre commande personnalisée
x-fern-default-test <your-command> [args]
# Exécuter avec sortie détaillée pour débogage
RUST_LOG=debug x-fern-default-test <your-command> [args]