Generowanie klientów
Codama generuje klientów TypeScript i Rust na podstawie pliku IDL programu. Wygenerowani klienci zawierają funkcje do wywoływania instrukcji i pobierania kont, eliminując potrzebę ręcznego serializowania i deserializowania kont programu lub danych instrukcji.
Codama jest w fazie aktywnego rozwoju i może ulec zmianie. Odwołaj się do podlinkowanych repozytoriów w sekcji szybkiego odniesienia, aby uzyskać najnowsze informacje.
Szybkie odniesienie
Polecenia CLI
| Polecenie | Opis |
|---|---|
codama init | Generuje plik konfiguracyjny Codama |
codama run | Generuje klientów programu na podstawie pliku konfiguracyjnego |
Generatory klientów
| Pakiet | Opis |
|---|---|
@codama/renderers-js | Generuje klientów TypeScript kompatybilnych z @solana/kit |
@codama/renderers-rust | Generuje klientów Rust kompatybilnych z solana_sdk |
@codama/nodes-from-anchor | Konwertuje IDL Anchor na IDL Codama w celu generowania klientów |
Dodatkowe zasoby
| Zasób | Opis |
|---|---|
| Codama | GitHub Codama |
| Codama CLI | GitHub Codama CLI |
| Codama Macros | GitHub Codama Macros. Generuje IDL Codama z natywnych programów Rust za pomocą makr Codama |
| Codama Macros Example Program | Przykładowy program demonstrujący użycie makr Codama |
Przykład
Ten przykład przeprowadza przez proces generowania klientów na podstawie IDL programu Anchor.
Przygotowanie plików projektu
Aby podążać za przykładem, utwórz nowy katalog o nazwie example i dodaj plik
idl.json oraz plik package.json z fragmentów kodu.
Ten przykład wykorzystuje IDL programu licznika. Zobacz źródło.
W projekcie Anchor, IDL znajduje się w target/idl/<program_name>.json po
uruchomieniu anchor build.
Utwórz plik konfiguracyjny Codama
Codama używa pliku konfiguracyjnego do określenia, gdzie znajduje się plik IDL, jakie generować języki klienckie oraz gdzie zapisać wygenerowany kod. Utwórz tę konfigurację, uruchamiając:
$npx codama init
To wyświetli pytania, które pomogą utworzyć plik codama.json w katalogu
głównym twojego projektu i zainstalować niezbędne zależności Codama.
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
Generowanie klientów
Po utworzeniu pliku konfiguracyjnego uruchom polecenie generowania, aby wygenerować klientów:
$npx codama run --all
To wygeneruje klientów programu w ścieżkach plików określonych w pliku konfiguracyjnym 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}]}}}
Nie wszystkie wygenerowane pliki są pokazane w odpowiadających fragmentach kodu.
Korzystanie z wygenerowanych klientów
Wygenerowani klienci zawierają kod źródłowy do interakcji z Twoim programem, ale
nie zawierają plików package.json (dla TypeScript) ani Cargo.toml (dla
Rust).
Będziesz musiał(a) albo utworzyć nowe pliki package.json i Cargo.toml, albo
dodać wymagane zależności z wygenerowanych klientów do istniejących plików
Twojego projektu.
Zintegrowane z Twoją aplikacją
Wygeneruj klienta bezpośrednio w katalogu źródłowym Twojej aplikacji, a
następnie dodaj wymagane zależności do istniejących plików package.json lub
Cargo.toml.
Użyj tego podejścia podczas tworzenia aplikacji, w której kod klienta nie musi być udostępniany ani publikowany.
Samodzielne pakiety lub crate'y
Utwórz osobne pakiety TypeScript lub crate'y Rust dla każdego klienta. Na
przykład, dodaj package.json w clients/js/ i Cargo.toml w clients/rust/.
Użyj tego podejścia, aby opublikować klienta jako bibliotekę wielokrotnego użytku (npm lub crates.io) lub udostępnić klienta w wielu aplikacjach w monorepozytorium.
Is this page helpful?