Generierung von Clients
Codama generiert TypeScript- und Rust- Clients aus der IDL-Datei eines Programms. Die generierten Clients enthalten Funktionen zum Aufrufen von Anweisungen und Abrufen von Konten, wodurch die Notwendigkeit entfällt, manuell Programmkonten oder instruction data zu serialisieren und zu deserialisieren.
Codama befindet sich in aktiver Entwicklung und kann sich ändern. Informieren Sie sich in den verlinkten Repositories in der Kurzreferenz über die neuesten Informationen.
Kurzreferenz
CLI-Befehle
| Befehl | Beschreibung |
|---|---|
codama init | Generiert eine Codama-Konfigurationsdatei |
codama run | Generiert Programm-Clients aus der Konfigurationsdatei |
Client-Generatoren
| Paket | Beschreibung |
|---|---|
@codama/renderers-js | Generiert @solana/kit kompatible TypeScript-Clients |
@codama/renderers-rust | Generiert solana_sdk kompatible Rust-Clients |
@codama/nodes-from-anchor | Konvertiert Anchor-IDLs zu Codama-IDLs für die Generierung von Clients |
Zusätzliche Ressourcen
| Ressource | Beschreibung |
|---|---|
| Codama | Codama GitHub |
| Codama CLI | Codama CLI GitHub |
| Codama Macros | Codama Macros GitHub. Generiert Codama IDL aus nativen Rust-Programmen mit Codama-Makros |
| Codama Macros Example Program | Beispielprogramm, das die Verwendung von Codama-Makros demonstriert |
Beispiel
Dieses Beispiel führt durch den Prozess der Generierung von Clients aus einem Anchor-Programm-IDL.
Projektdateien einrichten
Um mitzumachen, erstellen Sie ein neues Verzeichnis namens example und fügen
Sie die idl.json Datei und die package.json Datei aus den Code-Snippets
hinzu.
Dieses Beispiel verwendet eine Counter-Programm-IDL. Quellcode anzeigen.
In einem Anchor-Projekt befindet sich die IDL unter
target/idl/<program_name>.json nach dem Ausführen von anchor build.
Codama-Konfigurationsdatei erstellen
Codama verwendet eine Konfigurationsdatei, um anzugeben, wo sich die IDL-Datei befindet, welche Client-Sprachen generiert werden sollen und wohin der generierte Code ausgegeben werden soll. Erstellen Sie diese Konfiguration durch Ausführen von:
$npx codama init
Dies wird Sie mit Fragen auffordern, um eine codama.json-Datei im
Stammverzeichnis Ihres Projekts zu erstellen und die notwendigen
Codama-Abhängigkeiten zu installieren.
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
Clients generieren
Sobald die Konfigurationsdatei erstellt wurde, führen Sie den Generierungsbefehl aus, um die Clients zu generieren:
$npx codama run --all
Dies generiert die Programm-Clients in den Dateipfaden, die in der Codama-Konfigurationsdatei angegeben sind.
{"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}]}}}
Nicht alle generierten Dateien werden in den entsprechenden Code-Snippets angezeigt.
Verwendung der generierten Clients
Die generierten Clients enthalten Quellcode für die Interaktion mit Ihrem
Programm, aber keine package.json (für TypeScript) oder Cargo.toml (für
Rust) Dateien.
Sie müssen entweder neue package.json und Cargo.toml Dateien erstellen oder
die erforderlichen Abhängigkeiten aus den generierten Clients zu den bestehenden
Dateien Ihres Projekts hinzufügen.
In Ihre Anwendung integriert
Generieren Sie den Client direkt in das Quellverzeichnis Ihrer Anwendung und
fügen Sie dann die erforderlichen Abhängigkeiten zu Ihren bestehenden
package.json oder Cargo.toml hinzu.
Verwenden Sie diesen Ansatz beim Erstellen einer Anwendung, bei der der Client-Code nicht geteilt oder veröffentlicht werden muss.
Eigenständige Pakete oder Crates
Erstellen Sie separate TypeScript-Pakete oder Rust-Crates für jeden Client.
Fügen Sie zum Beispiel package.json in clients/js/ und Cargo.toml in
clients/rust/ hinzu.
Verwenden Sie diesen Ansatz, um den Client als wiederverwendbare Bibliothek (npm oder crates.io) zu veröffentlichen oder den Client über mehrere Anwendungen in einem Monorepo zu teilen.
Is this page helpful?