test-x-fern-global-parameters-extension-custom-commands

Par fern-api · fern

Comment créer des commandes personnalisées pour le CLI test-x-fern-global-parameters-extension à l'aide du SDK co-généré.

npx skills add https://github.com/fern-api/fern --skill test-x-fern-global-parameters-extension-custom-commands

Commandes personnalisées pour test-x-fern-global-parameters-extension

Aperçu

Le CLI test-x-fern-global-parameters-extension 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 auto-générées. Les commandes personnalisées reçoivent un client SDK entièrement 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/test-x-fern-global-parameters-extension/custom.rs    ← Vos gestionnaires de commandes (protégé par .fernignore)
cli/test-x-fern-global-parameters-extension/sdk.rs       ← Pont généré : client() + block_on()
cli/test-x-fern-global-parameters-extension/main.rs      ← Point d'entrée généré (appelle custom::register)
test-x-fern-global-parameters-extension-sdk/             ← Crate SDK typé co-généré
test-x-fern-global-parameters-extension-types/           ← Crate de modèles typés co-généré

Ajouter une commande personnalisée

1. Modifier cli/test-x-fern-global-parameters-extension/custom.rs

Ce fichier est protégé par .fernignorefern generate ne le récrira jamais. Enregistrez les commandes dans la fonction register() :

use test_x_fern_global_parameters_extension_sdk::api::*;

pub fn register(app: CliApp) -> CliApp {
    let app = app.command(
        clap::Command::new("get")
            .about("Run products get")
            .arg(clap::Arg::new("regionId").required(true))
            .arg(clap::Arg::new("productId").required(true))
        ,
        |matches, ctx| {
            let region_id = matches.get_one::<String>("regionId").unwrap();
            let product_id = matches.get_one::<String>("productId").unwrap();
            let client = super::sdk::client(ctx);
            let result = super::sdk::block_on(
                client.products.get(region_id, product_id),
            )?;
            println!("{}", serde_json::to_string_pretty(&result).unwrap());
            Ok(())
        },
    );
    app
}

Puis compilez et testez :

cargo build
test-x-fern-global-parameters-extension get <regionId> <productId>

2. Clients SDK disponibles

L'appel super::sdk::client(ctx) retourne un test_x_fern_global_parameters_extension_sdk::api::Client avec les sous-clients suivants :

Champ Type Description
client.products test_x_fern_global_parameters_extension_sdk::api::ProductsClient opérations products

3. Motifs clés

Obtenir le client SDK (partage d'exécution, authentification complète) :

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 les modèles typés pour la sérialisation requête/réponse :

use test_x_fern_global_parameters_extension_sdk::api::*;

Sécurité de la régénération

Fichier Régénéré ? Notes
cli/test-x-fern-global-parameters-extension/custom.rs Non Protégé par .fernignore
cli/test-x-fern-global-parameters-extension/sdk.rs Oui Fait le pont AppContext → client SDK
cli/test-x-fern-global-parameters-extension/main.rs Oui Appelle custom::register(app)
test-x-fern-global-parameters-extension-sdk/ Oui Crate SDK typé co-généré
test-x-fern-global-parameters-extension-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 spécification d'API la plus récente. 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
test-x-fern-global-parameters-extension <your-command> [args]

# Exécuter avec sortie détaillée pour le débogage
RUST_LOG=debug test-x-fern-global-parameters-extension <your-command> [args]

Skills similaires