Генерация клиентов
Codama генерирует TypeScript и Rust клиентов из IDL-файла программы. Сгенерированные клиенты включают функции для вызова инструкций и получения аккаунтов, устраняя необходимость вручную сериализовать и десериализовать аккаунты программы или instruction data.
Codama находится в активной разработке и может изменяться. Обратитесь к связанным репозиториям в разделе быстрого справочника для получения актуальной информации.
Быстрый справочник
Команды CLI
| Команда | Описание |
|---|---|
codama init | Генерация конфигурационного файла Codama |
codama run | Генерация клиентов программы из конфигурационного файла |
Генераторы клиентов
| Пакет | Описание |
|---|---|
@codama/renderers-js | Генерация совместимых с @solana/kit TypeScript клиентов |
@codama/renderers-rust | Генерация совместимых с solana_sdk Rust клиентов |
@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?