nullable-request-body-custom-commands

Par fern-api · fern

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

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

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 .fernignorefern 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]

Skills similaires