Импорт функций
Узнайте, как импортировать функции из других плагинов, написанных на разных языках, и использовать их в своём плагине.
Чтобы использовать функции другого плагина в вашем плагине на Rust, необходимо сгенерировать привязки для конкретного языка. Эти привязки предоставляют обёртки, необходимые для вызова функций, экспортируемых другими плагинами. Это руководство объясняет, как сгенерировать такие привязки и как использовать их в вашем плагине на Rust.
Генерация привязок для Rust
Plugify предоставляет единый инструмент-генератор для автоматического создания кода на Rust для импорта функций из других плагинов. Эти привязки включают функции-обёртки, которые обрабатывают вызовы функций и передачу параметров.
Шаги для генерации привязок Rust
Использование онлайн-генератора:
Перейдите на инструмент plugify-gen, чтобы сгенерировать привязки через удобный веб-интерфейс. Просто загрузите файл манифеста вашего плагина (.pplugin) и выберите Rust в качестве целевого языка, чтобы получить соответствующий файл .rs.
Использование инструмента командной строки:
Вы также можете загрузить и использовать генератор локально из репозитория plugify-gen.
Пример использования:
Интеграция сгенерированного модуля:
- Инструмент создаст папку модуля (например,
plugin_from_another_language/) в указанном выходном каталоге. - Скопируйте всю сгенерированную папку модуля в каталог
src/вашего проекта. - Объявите модуль в вашем
src/lib.rs.
Интеграция в проект
После генерации модуля интегрируйте его в ваш проект на Rust:
Копирование модуля в проект
Скопируйте сгенерированную папку модуля в каталог src/ вашего проекта:
Объявление модуля
Объявите модуль в вашем src/lib.rs:
Импорт в исходных файлах
Импортируйте и используйте сгенерированный модуль в ваших файлах на Rust:
Использование сгенерированных функций-обёрток
Сгенерированный модуль содержит функции-обёртки, которые позволяют вызывать функции из другого плагина. Эти обёртки обрабатывают поиск адреса функции и передачу параметров.
Пример сгенерированных привязок
Вот пример сгенерированного файла привязок Rust для плагина с именем plugin_from_another_language:
Как это работает
- Функция-обёртка (
ParamCallback) получает адрес экспортированной функции через API Plugify. - Делегат
__plugin_from_another_language_ParamCallbackустанавливается языковым модулем во время загрузки плагина. - Функция-обёртка напрямую передаёт параметры в экспортированную функцию.
Пример: использование сгенерированных привязок
Вот как можно использовать сгенерированные привязки в вашем плагине на Rust:
Работа с типами PlgTypes
Plugify использует специальные типы для межъязыковой совместимости:
Str
Arr<T>
Var
Когда необходима генерация привязок?
Генерация привязок необходима при импорте функций из плагинов, написанных на других языках. Без этих привязок вы не сможете безопасно вызывать экспортированные функции. Генератор обеспечивает типобезопасность и корректную совместимость ABI.
Рекомендации
- Используйте инструмент-генератор: Всегда используйте генератор Plugify (онлайн или командную строку) для создания привязок к импортируемым функциям.
- Подключайте сгенерированные модули: Размещайте сгенерированные файлы в каталоге модулей и подключайте их в своём плагине.
- Безопасно обрабатывайте ошибки: Проверяйте указатели на функции на null перед вызовом импортированных функций.
- Документируйте зависимости: Чётко документируйте плагины и функции, от которых зависит ваш плагин.
- Используйте типы PlgTypes: Всегда используйте
Str,Arr<T>иVarдля межъязыковой совместимости. - Учитывайте владение: Будьте внимательны с заимствованными ссылками и владеющими значениями.
Заключение
Импорт функций из другого плагина в Rust выполняется просто, если вы используете генератор Plugify для создания необходимых привязок. Эти привязки предоставляют безопасные функции-обёртки, которые обрабатывают поиск адреса функции и передачу параметров, что упрощает интеграцию функциональности из других плагинов. Следуя шагам и рекомендациям, изложенным в этом руководстве, вы сможете создавать надёжные и совместимые плагины в экосистеме Plugify с гарантиями безопасности Rust.