Génération de clients
Codama génère des clients TypeScript et Rust à partir du fichier IDL d'un programme. Les clients générés incluent des fonctions pour appeler des instructions et récupérer des comptes, éliminant ainsi le besoin de sérialiser et désérialiser manuellement les comptes du programme ou les instruction data.
Codama est en développement actif et sujet à des modifications. Consultez les dépôts liés dans la référence rapide pour les informations les plus récentes.
Référence rapide
Commandes CLI
| Commande | Description |
|---|---|
codama init | Générer un fichier de configuration codama |
codama run | Générer des clients de programme à partir du fichier de configuration |
Générateurs de clients
| Package | Description |
|---|---|
@codama/renderers-js | Générer des clients TypeScript compatibles avec @solana/kit |
@codama/renderers-rust | Générer des clients Rust compatibles avec solana_sdk |
@codama/nodes-from-anchor | Convertir les IDL Anchor en IDL Codama pour générer des clients |
Ressources supplémentaires
| Ressource | Description |
|---|---|
| Codama | GitHub de Codama |
| Codama CLI | GitHub de Codama CLI |
| Codama Macros | GitHub de Codama Macros. Générer des IDL Codama à partir de programmes Rust natifs avec les macros Codama |
| Codama Macros Example Program | Programme exemple démontrant l'utilisation des macros Codama |
Exemple
Cet exemple détaille le processus de génération de clients à partir d'un IDL de programme Anchor.
Configuration des fichiers du projet
Pour suivre l'exemple, créez un nouveau répertoire appelé example et ajoutez
le fichier idl.json et le fichier package.json à partir des extraits de
code.
Cet exemple utilise un IDL de programme compteur. Voir la source.
Dans un projet Anchor, l'IDL se trouve à target/idl/<program_name>.json après
avoir exécuté anchor build.
Créer un fichier de configuration Codama
Codama utilise un fichier de configuration pour spécifier où se trouve le fichier IDL, quels langages clients générer, et où placer le code généré. Créez cette configuration en exécutant :
$npx codama init
Cela vous posera des questions pour créer un fichier codama.json à la racine
de votre projet et installer les dépendances Codama nécessaires.
Welcome to Codama!✔ Where is your IDL located? (Supports Codama and Anchor IDLs). … idl.json✔ Which script preset would you like to use? › Generate JavaScript client, Generate Rust client✔ [js] Where should the JavaScript code be generated? … clients/js/src/generated✔ [rust] Where is the Rust client crate located? … clients/rust✔ [rust] Where should the Rust code be generated? … clients/rust/src/generated▲ Your configuration requires additional dependencies.▲ Install command: pnpm install @codama/nodes-from-anchor @codama/renderers-js @codama/renderers-rust✔ Install dependencies? … yes→ Installing├─ @codama/nodes-from-anchor├─ @codama/renderers-js└─ @codama/renderers-rust✔ Dependencies installed successfully.✔ Configuration file created.└─ Path: /example/codama.json
Générer les clients
Une fois le fichier de configuration créé, exécutez la commande de génération pour générer les clients :
$npx codama run --all
Cela générera les clients du programme dans les chemins de fichiers spécifiés dans le fichier de configuration codama.
{"idl": "idl.json","before": [],"scripts": {"js": {"from": "@codama/renderers-js","args": ["clients/js/src/generated"]},"rust": {"from": "@codama/renderers-rust","args": ["clients/rust/src/generated",{"crateFolder": "clients/rust","formatCode": true}]}}}
Tous les fichiers générés ne sont pas affichés dans les extraits de code correspondants.
Utilisation des clients générés
Les clients générés incluent le code source pour interagir avec votre programme
mais ne comprennent pas les fichiers package.json (pour TypeScript) ou
Cargo.toml (pour Rust).
Vous devrez soit créer de nouveaux fichiers package.json et Cargo.toml, soit
ajouter les dépendances requises des clients générés aux fichiers existants de
votre projet.
Intégration dans votre application
Générez le client directement dans le répertoire source de votre application,
puis ajoutez les dépendances requises à vos fichiers package.json ou
Cargo.toml existants.
Utilisez cette approche lors de la création d'une application où le code client n'a pas besoin d'être partagé ou publié.
Packages ou crates autonomes
Créez des packages TypeScript ou des crates Rust séparés pour chaque client. Par
exemple, ajoutez package.json dans clients/js/ et Cargo.toml dans
clients/rust/.
Utilisez cette approche pour publier le client comme une bibliothèque réutilisable (npm ou crates.io) ou partager le client entre plusieurs applications dans un monorepo.
Is this page helpful?