Clients genereren
Codama genereert TypeScript- en Rust- clients vanuit het IDL-bestand van een programma. De gegenereerde clients bevatten functies voor het aanroepen van instructies en het ophalen van accounts, waardoor het niet meer nodig is om handmatig programma-accounts of instruction data te serialiseren en deserialiseren.
Codama is in actieve ontwikkeling en onderhevig aan veranderingen. Raadpleeg de gelinkte repositories in de snelle referentie voor de meest recente informatie.
Snelle referentie
CLI-opdrachten
| Opdracht | Beschrijving |
|---|---|
codama init | Genereer een codama-configuratiebestand |
codama run | Genereer programmaclients vanuit het configuratiebestand |
Client-generators
| Pakket | Beschrijving |
|---|---|
@codama/renderers-js | Genereer @solana/kit compatibele TypeScript-clients |
@codama/renderers-rust | Genereer solana_sdk compatibele Rust-clients |
@codama/nodes-from-anchor | Converteer Anchor IDLs naar Codama IDLs voor het genereren van clients |
Aanvullende bronnen
| Bron | Beschrijving |
|---|---|
| Codama | Codama GitHub |
| Codama CLI | Codama CLI GitHub |
| Codama Macros | Codama Macros GitHub. Genereer Codama IDL vanuit native Rust-programma's met Codama-macro's |
| Codama Macros Example Program | Voorbeeldprogramma dat het gebruik van Codama-macro's demonstreert |
Voorbeeld
Dit voorbeeld doorloopt het proces van het genereren van clients vanuit een Anchor-programma IDL.
Project bestanden instellen
Om mee te doen, maak een nieuwe map aan genaamd example en voeg het idl.json
bestand en het package.json bestand toe uit de codefragmenten.
Dit voorbeeld gebruikt een counter programma IDL. Bekijk broncode.
In een Anchor project is de IDL te vinden in target/idl/<program_name>.json na
het uitvoeren van anchor build.
Maak een Codama configuratiebestand
Codama gebruikt een configuratiebestand om aan te geven waar het IDL-bestand zich bevindt, welke cliënttalen gegenereerd moeten worden en waar de gegenereerde code moet worden opgeslagen. Maak dit configuratiebestand door het volgende uit te voeren:
$npx codama init
Dit zal je vragen stellen om een codama.json bestand in de hoofdmap van je
project aan te maken en de benodigde Codama-afhankelijkheden te installeren.
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
Genereer clients
Zodra het configuratiebestand is aangemaakt, voer je het generatie-commando uit om de clients te genereren:
$npx codama run --all
Dit zal de programmaclients genereren in de bestandspaden die zijn gespecificeerd in het codama-configuratiebestand.
{"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}]}}}
Niet alle gegenereerde bestanden worden getoond in de bijbehorende codevoorbeelden.
De gegenereerde clients gebruiken
De gegenereerde clients bevatten broncode voor interactie met je programma maar
bevatten geen package.json (voor TypeScript) of Cargo.toml (voor Rust)
bestanden.
Je zult nieuwe package.json en Cargo.toml bestanden moeten maken of de
vereiste afhankelijkheden van de gegenereerde clients aan de bestaande bestanden
van je project moeten toevoegen.
Geïntegreerd in je applicatie
Genereer de client direct in de bronmap van je applicatie en voeg vervolgens de
vereiste afhankelijkheden toe aan je bestaande package.json of Cargo.toml.
Gebruik deze aanpak bij het bouwen van een applicatie waarbij de clientcode niet gedeeld of gepubliceerd hoeft te worden.
Zelfstandige packages of crates
Maak afzonderlijke TypeScript packages of Rust crates voor elke client. Voeg
bijvoorbeeld package.json toe in clients/js/ en Cargo.toml in
clients/rust/.
Gebruik deze aanpak om de client te publiceren als een herbruikbare bibliotheek (npm of crates.io) of om de client te delen tussen meerdere applicaties in een monorepo.
Is this page helpful?