Генерація клієнтів
Codama генерує клієнти TypeScript та Rust з IDL-файлу програми. Згенеровані клієнти включають функції для виклику інструкцій та отримання облікових записів, усуваючи необхідність вручну серіалізувати та десеріалізувати облікові записи програми або instruction data.
Codama активно розробляється і може змінюватися. Звертайтеся до пов'язаних репозиторіїв у швидкому довіднику для отримання найновішої інформації.
Швидкий довідник
Команди CLI
| Команда | Опис |
|---|---|
codama init | Створити конфігураційний файл codama |
codama run | Згенерувати клієнти програми з конфігураційного файлу |
Генератори клієнтів
| Пакет | Опис |
|---|---|
@codama/renderers-js | Генерує клієнти TypeScript, сумісні з @solana/kit |
@codama/renderers-rust | Генерує клієнти Rust, сумісні з solana_sdk |
@codama/nodes-from-anchor | Конвертує Anchor IDL у Codama IDL для генерації клієнтів |
Додаткові ресурси
| Ресурс | Опис |
|---|---|
| Codama | GitHub Codama |
| Codama CLI | GitHub Codama CLI |
| Codama Macros | GitHub Codama Macros. Генерація Codama IDL з нативних програм Rust за допомогою макросів Codama |
| Codama Macros Example Program | Приклад програми, що демонструє використання макросів Codama |
Приклад
Цей приклад показує процес генерації клієнтів з IDL програми Anchor.
Налаштування файлів проєкту
Щоб повторити приклад, створіть новий каталог під назвою example і додайте
файл idl.json та файл package.json з фрагментів коду.
У цьому прикладі використовується IDL програми лічильника. Переглянути код.
У проєкті Anchor IDL знаходиться в target/idl/<program_name>.json після
запуску anchor build.
Створення файлу конфігурації Codama
Codama використовує файл конфігурації для визначення місцезнаходження файлу IDL, які мови клієнта генерувати та куди виводити згенерований код. Створіть цю конфігурацію, виконавши:
$npx codama init
Це запропонує вам відповісти на запитання для створення файлу codama.json у
кореневій директорії вашого проєкту та встановити необхідні залежності 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
Генерація клієнтів
Після створення файлу конфігурації запустіть команду генерації для створення клієнтів:
$npx codama run --all
Це згенерує клієнти програми в шляхах до файлів, вказаних у файлі конфігурації 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}]}}}
Не всі згенеровані файли показані у відповідних фрагментах коду.
Використання згенерованих клієнтів
Згенеровані клієнти включають вихідний код для взаємодії з вашою програмою, але
не містять package.json (для TypeScript) або Cargo.toml (для Rust) файлів.
Вам потрібно буде або створити нові файли package.json та Cargo.toml, або
додати необхідні залежності зі згенерованих клієнтів до існуючих файлів вашого
проєкту.
Інтеграція у ваш додаток
Згенеруйте клієнт безпосередньо в директорію з вихідним кодом вашого додатку, а
потім додайте необхідні залежності до існуючих package.json або Cargo.toml.
Використовуйте цей підхід при створенні додатку, де код клієнта не потрібно спільно використовувати або публікувати.
Окремі пакети або крейти
Створіть окремі пакети TypeScript або крейти Rust для кожного клієнта.
Наприклад, додайте package.json в clients/js/ та Cargo.toml в
clients/rust/.
Використовуйте цей підхід для публікації клієнта як багаторазової бібліотеки (npm або crates.io) або для спільного використання клієнта в кількох додатках у монорепозиторії.
Is this page helpful?