Каков наилучший способ реализации необязательных библиотечных зависимостей в Rust?

Я пишу игрушечную библиотеку программного обеспечения в Rust, которая должна иметь возможность загружать изображения практически любого типа во внутреннюю структуру данных для изображения. Это ранние времена для экосистемы Rust, и нет ни одной библиотеки / набора привязок, которым бы я мог доверять для этой задачи.

Я хотел бы в идеале:

  • Поддержка нескольких избыточных внешних библиотек, которые могут или не могут быть доступны во время выполнения
  • Поддержка нескольких избыточных внешних библиотек, которые могут или не могут быть доступны во время компиляции.
  • Включите по крайней мере одну запасную реализацию, которая поставляется с моим кодом.
  • Полностью инкапсулируйте все содержимое загрузки файлов за функцией, которая выполняет путь -> загрузка InternalImage.

Есть ли лучший способ реализовать необязательные зависимости, подобные этой, в Rust? Некоторые из библиотек будут Rust, а некоторые, вероятно, будут C-библиотеками с привязками Rust.

1 ответ

Cargo, менеджер пакетов Rust, может помочь с этим. Это позволяет вам объявлять необязательные зависимости времени компиляции. Смотрите раздел [features] документации Cargo.

В зависимости от времени выполнения я не уверен. Я думаю, что std::dynamic_lib может быть полезным. Смотрите пример использованияDynamicLibrary в предыдущем вопросе ТАК.

Другие вопросы по тегам