plant-store-api-custom-commands

Par fern-api · fern

Comment créer des commandes personnalisées pour le CLI `plant-store-api` à l'aide du SDK co-généré.

npx skills add https://github.com/fern-api/fern --skill plant-store-api-custom-commands

Commandes personnalisées pour plant-store-api

Vue d'ensemble

Le CLI plant-store-api supporte les commandes personnalisées créé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 configuré qui hérite de l'authentification du CLI, des tentatives, du TLS, de l'URL de base et des en-têtes globaux — aucune configuration requise.

Architecture

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

Ajouter une commande personnalisée

1. Éditer cli/plant-store-api/custom.rs

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

use plant_store_api_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 plant_store_api_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. 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 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 plant_store_api_sdk::api::*;

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

Fichier Régénéré ? Notes
cli/plant-store-api/custom.rs Non Protégé par .fernignore
cli/plant-store-api/sdk.rs Oui Pont AppContext → client SDK
cli/plant-store-api/main.rs Oui Appelle custom::register(app)
plant-store-api-sdk/ Oui Crate SDK typée co-générée
plant-store-api-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 SDK change (méthodes renommées, nouveaux sous-clients), mettez à jour votre custom.rs en conséquence.

Build & Test

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

# Exécuter votre commande personnalisée
plant-store-api <your-command> [args]

# Exécuter avec sortie verbose pour déboguer
RUST_LOG=debug plant-store-api <your-command> [args]

Skills similaires