openapi-request-body-ref-custom-commands

Par fern-api · fern

Comment créer des commandes personnalisées pour la CLI `openapi-request-body-ref` à l'aide du SDK co-généré.

npx skills add https://github.com/fern-api/fern --skill openapi-request-body-ref-custom-commands

Commandes personnalisées pour openapi-request-body-ref

Aperçu

La CLI openapi-request-body-ref supporte les commandes personnalisées rédigées 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 câblé qui hérite de l'authentification, des tentatives, de TLS, de l'URL de base et des en-têtes globaux de la CLI — zéro configuration requise.

Architecture

cli/openapi-request-body-ref/custom.rs    ← Vos gestionnaires de commandes (protégés par .fernignore)
cli/openapi-request-body-ref/sdk.rs       ← Pont généré : client() + block_on()
cli/openapi-request-body-ref/main.rs      ← Point d'entrée généré (appelle custom::register)
openapi-request-body-ref-sdk/             ← Crate SDK typé co-généré
openapi-request-body-ref-types/           ← Crate modèle typé co-généré

Ajouter une commande personnalisée

1. Éditer cli/openapi-request-body-ref/custom.rs

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

use openapi_request_body_ref_sdk::api::*;

pub fn register(app: CliApp) -> CliApp {
    let app = app.command(
        clap::Command::new("get-catalog-image")
            .about("Retrieve a catalog image")
            .arg(clap::Arg::new("image_id").required(true))
        ,
        |matches, ctx| {
            let image_id = matches.get_one::<String>("image_id").unwrap();
            let client = super::sdk::client(ctx);
            let result = super::sdk::block_on(
                client.catalog.get_catalog_image(image_id),
            )?;
            println!("{}", serde_json::to_string_pretty(&result).unwrap());
            Ok(())
        },
    );
    app
}

Ensuite, compilez et testez :

cargo build
openapi-request-body-ref get-catalog-image <image_id>

2. Clients SDK disponibles

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

Champ Type Description
client.vendor openapi_request_body_ref_sdk::api::VendorClient opérations vendor
client.catalog openapi_request_body_ref_sdk::api::CatalogClient opérations catalog
client.team_member openapi_request_body_ref_sdk::api::TeamMemberClient opérations team_member

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

use openapi_request_body_ref_sdk::api::*;

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

Fichier Régénéré ? Remarques
cli/openapi-request-body-ref/custom.rs Non Protégé par .fernignore
cli/openapi-request-body-ref/sdk.rs Oui Pont AppContext → client SDK
cli/openapi-request-body-ref/main.rs Oui Appelle custom::register(app)
openapi-request-body-ref-sdk/ Oui Crate SDK typé co-généré
openapi-request-body-ref-types/ Oui Modèles typés co-générés

Après avoir exécuté fern generate, votre custom.rs est conservé. Tout le code généré (SDK, types, glue, main.rs) est mis à jour pour correspondre à la dernière spécification d'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 la CLI (incluant les commandes personnalisées)
cargo build

# Exécuter votre commande personnalisée
openapi-request-body-ref <your-command> [args]

# Exécuter avec sortie verbale pour le débogage
RUST_LOG=debug openapi-request-body-ref <your-command> [args]

Skills similaires