Привет, Хабр!
Некоторое время назад у меня образовалось немного (вернее много) свободного времени, и я между моментами серфинга на известном сайте HH решил посмотреть в сторону освоения Rust. Кроме всего прочего меня очень интересует тема библиотек графических интерфейсов.
В Rust есть несколько подобных библиотек, я решил остановиться на Iced — текущая версия Iced 0.14. Прежде всего понадобилось понять принципы построения библиотеки и архитектурную философию паттерна ELM, которая реализована в библиотеке.
В процессе изучения родился описываемый ниже PET‑проект Iced Forms Pack. Проект представляет собой конструктор форм из базовых элементов Iced.

В программе можно сконструировать простые формы и выполнять их сохранение/восстановление. Имеется возможность посмотреть код Rust для реализации данной формы с теми или иными настройками элементов.

Предусмотрена возможность экспорта формы в JSON для последующей генерации приложения.

Кодогенерация из экспортированного файла в проект Rust выполняется с помощью утилиты iced_forms_gen. Ниже показан подобный проект для демонстрируемой в статье формы.

Код генерируется с использованием шаблонов Tera 2. Полученный проект остается дополнить логикой. Пример формы компилируется в следующее приложение:

Приложение Iced Forms Pack задумывалось как мультиплатформенное, и по крайней мере в Windows/Linux оно компилируется и выполняется. Целью данного PET‑проекта я ставил освоение Rust, изучение одной из GUI библиотек языка и попытку реализации простенького RAD.
Спасибо за внимание.
В качестве дисклаймера: проект является pet‑проектом, разрабатывался в качестве обучения rust с привлечением ИИ.
Исходные коды проекта можно посмотреть по ссылке
AndreyDmitriev
Спасибо! Прежде чем я сам попробую на выходных, такой вопрос: а результат, эти вот формы Iced, можно потом в WASM скомпилировать, чтоб они в web крутились, ну вот как с egui?
dvserg Автор
Сомневаюсь. Экспорт не подгонялся ни под один известный формат. Много завязано на дефолтные установки Iced - "если каких-то параметров нет, то они берутся по дефолту". Хотя полный экспорт свойств возможен если закомментировать конкретное место в сериализаторе. Экспорт делался для утилиты iced_forms_gen
AndreyDmitriev
Попробовал субботним утром. В общем проект собирается и работает, да. Но iced под wasm совершенно не заточен, и, возможно в 15 версии поддержка будет, а может и нет. Где-то до 12 версии можно было через iced_web, но развивать это не стали. Тут не в экспорте проблема, а в самом iced. В общем копилот пишет, что бекэнд WebAssembly был выпилен после 12 версии, а WebGPU вроде как только в разработке. А на десктопе норм.
Ну а с egui 0.36 компиляция в wasm возможна, самое простое — пользоваться trunk. Кстати, Ваш проект навёл меня на github.com/timschmidt/egui-rad-builder, надо будет потрогать на досуге. Ещё я Leptos пробовал, тоже работает, а Dioxus — пока не юзал. Вообще есть несколько способов собрать в веб, но iced — не в их числе.Вот тут более-менее полный список — https://areweguiyet.com.
Для внутренних же проектов я иногда пользуюсь такой эзотерической штуковиной — NI LabWindows/CVI как RAD для формошлёпства (в основном из-за хорошей поддержки графиков и картинок), но штука сильно коммерческая (но у меня лицензия) и только под Windows. Я вот тут писал, если интересно — приложение на Расте с GUI нестандартным способом. Там комменты полезные, а в опросе о необходимости такой штуки в опенсорсе мнения разделились 50/50.