oauth-client-credentials-openapi-custom-commands

Par fern-api · fern

Comment créer des commandes personnalisées pour le CLI `oauth-client-credentials-openapi` à l'aide du SDK co-généré.

npx skills add https://github.com/fern-api/fern --skill oauth-client-credentials-openapi-custom-commands

Commandes personnalisées pour oauth-client-credentials-openapi

Aperçu

La CLI oauth-client-credentials-openapi 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 générées automatiquement. Les commandes personnalisées reçoivent un client SDK entièrement configuré qui hérite de l'authentification, des retries, du TLS, de l'URL de base et des en-têtes globaux de la CLI — zéro configuration requise.

Architecture

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

Ajouter une commande personnalisée

1. Modifiez cli/oauth-client-credentials-openapi/custom.rs

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

use oauth_client_credentials_openapi_sdk::api::*;

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

Puis compilez et testez :

cargo build
oauth-client-credentials-openapi get <plantId>

2. Clients SDK disponibles

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

Champ Type Description
client.identity oauth_client_credentials_openapi_sdk::api::IdentityClient opérations d'identité
client.plants oauth_client_credentials_openapi_sdk::api::PlantsClient opérations sur les plantes

3. Patterns clés

Obtenir le client SDK (partage d'exécution, entièrement authentifié) :

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

use oauth_client_credentials_openapi_sdk::api::*;

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

Fichier Régénéré ? Notes
cli/oauth-client-credentials-openapi/custom.rs Non Protégé par .fernignore
cli/oauth-client-credentials-openapi/sdk.rs Oui Pont AppContext → client SDK
cli/oauth-client-credentials-openapi/main.rs Oui Appelle custom::register(app)
oauth-client-credentials-openapi-sdk/ Oui Crate SDK typé co-généré
oauth-client-credentials-openapi-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 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.

Compiler et tester

# Compiler la CLI (inclut les commandes personnalisées)
cargo build

# Exécuter votre commande personnalisée
oauth-client-credentials-openapi <your-command> [args]

# Exécuter avec sortie détaillée pour le débogage
RUST_LOG=debug oauth-client-credentials-openapi <your-command> [args]

Skills similaires