acme-versioned-custom-commands

Par fern-api · fern

Comment créer des commandes personnalisées pour le CLI acme-versioned à l'aide du SDK co-généré.

npx skills add https://github.com/fern-api/fern --skill acme-versioned-custom-commands

Commandes personnalisées pour acme-versioned

Aperçu

La CLI acme-versioned 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 reçoivent un client SDK complètement câblé 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/acme-versioned/custom.rs    ← Vos gestionnaires de commande (protégés par .fernignore)
cli/acme-versioned/sdk.rs       ← Pont généré : client() + block_on()
cli/acme-versioned/main.rs      ← Point d'entrée généré (appelle custom::register)
acme-versioned-sdk/             ← Caisse SDK typée co-générée
acme-versioned-types/           ← Caisse modèle typée co-générée

Ajouter une commande personnalisée

1. Éditer cli/acme-versioned/custom.rs

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

use acme_versioned_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.v1.get(id),
            )?;
            println!("{}", serde_json::to_string_pretty(&result).unwrap());
            Ok(())
        },
    );
    app
}

2. Clients SDK disponibles

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

Champ Type Description
client.v1 acme_versioned_sdk::api::V1Client opérations v1
client.v2 acme_versioned_sdk::api::V2Client opérations v2

3. Modèles 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 acme_versioned_sdk::api::*;

4. Authentification

Les commandes personnalisées héritent automatiquement de l'authentification de la CLI. Les schémas d'authentification suivants sont configurés :

  • bearerAuth (bearer) : env ACME_VERSIONED_TOKEN

Aucun câblage d'authentification manuel n'est nécessaire dans les gestionnaires de commandes personnalisées.

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

Fichier Régénéré ? Notes
cli/acme-versioned/custom.rs Non Protégé par .fernignore
cli/acme-versioned/sdk.rs Oui Relie AppContext → client SDK
cli/acme-versioned/main.rs Oui Appelle custom::register(app)
acme-versioned-sdk/ Oui Caisse SDK typée co-générée
acme-versioned-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, colle, main.rs) est mis à jour pour correspondre à la dernière spécification d'API. Si la surface SDK change (méthodes renommées, nouveaux sous-clients), mettez à jour votre custom.rs en conséquence.

Construction et test

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

# Exécuter votre commande personnalisée
acme-versioned <your-command> [args]

# Exécuter avec sortie détaillée pour déboguer
RUST_LOG=debug acme-versioned <your-command> [args]

Skills similaires